检查T对象是否具有属性和set属性

时间:2015-11-18 16:10:52

标签: c# generics windows-runtime

你好我有一个通用的方法

public async Task<T> MyMethod<T>(...)
{
 //logic here...
}

我想在此方法中检查T对象是否具有特定属性,然后为此属性设置值:

我尝试过创建一个动态对象并执行以下操作:

var result = default(T);
dynamic obj = result;

Error error = new Error();
error.Message = "An error occured, please try again later.";
error.Name = "Error";

obj.Errors.Add(error);
result = obj;

return result;

但它似乎无法奏效。

2 个答案:

答案 0 :(得分:2)

如果您控制使用MyMethod的所有可能类型,最简单的选择是创建一个定义所需属性的接口:

public interface IThing
{
    IList<Error> Errors { get; }
}

并更改方法签名:

public async Task<T> MyMethod<T>(...) where T : IThing

如果您这样做,传入的每个项目都必须实现您的界面,因此具有Errors属性。

答案 1 :(得分:2)

您应该使用object.GetType获取对象的运行时类型,然后您可以检查它是否具有https://open.mapquestapi.com/logger/v1/transaction?transaction=log&t=m&c=1&c2=1&s=6770&lat=53.292660000000005&lng=-9.005374&key=XXXXX,rs=XXXXX&width=775&height=500&rand=6794&v=JS_7.0.s_MQ&r=的特定属性,如果是,请调用Type.GetProperty

PropertyInfo pi = obj.GetType().GetProperty("PropertyName");
if (pi != null)
{
    pi.SetValue(obj, value);
}