你好我有一个通用的方法
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;
但它似乎无法奏效。
答案 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);
}