Я пытаюсь написать метод создания NullObject
, где я передаю имя класса, которое реализует интерфейс ICreateEmptyInstance
(который пуст), и он просматривает его свойства, ища другие классы, реализующие ICreateEmptyInstance
, и создаст «Нулевые» экземпляры этих.Создание объектов с отражением
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>();
Где у меня проблемы находится внутри цикла Еогеасп, с этой линией
var propertyInstance = NullObject.Create<property.PropertyType>();
... Очевидно, это не работает, но как я могу создать создание «нулевого объекта» для назначения экземпляру, который я сейчас создаю.
EDIT: А как насчет дженериков? Я хотел бы пустые экземпляры, созданные
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);
}
возможно дубликат [Получить новый экземпляр объекта из Type] (HTTP: // stackoverflow.com/questions/752/get-a-new-object-instance-from-a-type) –