C#反射,设置一个null属性的新实例

本文关键字:属性 新实例 实例 null 一个 反射 设置 | 更新日期: 2023-09-27 17:59:21

我编写了一个小方法,其唯一目的是检查给定类的属性是否为null。如果属性为null,那么创建一个新的实例

  public static void CheckIfPropertyIsNull<TEntity>(SomeBusinessEntity someBusinessEntity) where TEntity : new()
    {
        var properties = typeof(SomeBusinessEntity).GetProperties();
        foreach (PropertyInfo propertyInfo in properties)
        {
            Type currentType = propertyInfo.PropertyType;
            if (currentType == typeof(TEntity))
            {
                var propertyData = propertyInfo.GetValue(someBusinessEntity, null);
                if (propertyData == null)
                {
                    object instance = Activator.CreateInstance(typeof(TEntity));
                    // And then?
                    //propertyInfo.SetValue(null, instance);
                    return;
                }
            }
        }
    }

我尝试使用SetValue()方法,但没有成功。

C#反射,设置一个null属性的新实例

SetValue中,您仍然需要提供属性所有者的实例:someBusinessEntity

object instance = new TEntity();
// And then
propertyInfo.SetValue(someBusinessEntity, instance);

请注意,您的逻辑在我看来很奇怪。您正在使用泛型类型来设置所有属性。为什么不使用属性的类型?