我正在尝试编写一个NullObject
创建方法,在其中我传入一个实现ICreateEmptyInstance
接口(即为空)的类名,它会遍历它的属性以寻找其他实现的类ICreateEmptyInstance
并将创建这些类的“Null”实例。
public interface ICreateEmptyInstance { }
public static class NullObject
{
public static T Create<T>() where T : ICreateEmptyInstance, new()
{
var instance = new T();
var properties = typeof(T).GetProperties();
foreach (var property in properties.Where(property => typeof(ICreateEmptyInstance).IsAssignableFrom(property.PropertyType)))
{
var propertyInstance = NullObject.Create<property.PropertyType>();
property.SetValue(instance, propertyInstance);
}
return instance;
}
}
我应该可以用这个来称呼它
var myEmptyClass = NullObject.Create<MyClass>();
我遇到问题的地方是在 foreach 循环内,这条线
var propertyInstance = NullObject.Create<property.PropertyType>();
...显然这不起作用,但我怎样才能完成创建一个“空对象”来分配给我当前正在创建的实例。
编辑:那泛型呢?我想创建空实例
foreach (var property in properties.Where(property => property.GetType().IsGenericType))
{
var propertyInstance = Enumerable.Empty<>(); //TODO: how do I get the type for here?
property.SetValue(instance, propertyInstance);
}