检查 T 对象是否有 属性 并设置 属性

Check if T object has a property and set property

你好,我有一个通用方法

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;

不过好像不行。

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

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

并更改方法签名:

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

如果你这样做,传入的每个项目都必须实现你的接口,因此有一个 Errors 属性.

您应该使用 object.GetType 获取对象的运行时类型,然后您可以使用 Type.GetProperty , and if yes, call PropertyInfo.SetValue 检查它是否具有特定的 属性 :

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