C# - Принимая универсальный аргумент, используйте отражение, чтобы изменить свойства и вернуть универсальный аргумент
Я пытаюсь взять универсальный аргумент, манипулировать его свойствами через Reflection, а затем вернуть универсальный тип с измененными свойствами.
public IEnumerable<T> GenerateTest()
{
var type = typeof(T);
foreach (var field in type.GetProperties())
{
// Modify / Set properties on variable type
}
// How do I return object T with the parameters that I modified in the iteration above?
}
1 ответ
Решение
Чтобы иметь возможность создать новый T
объект, вам нужно добавить new()
ограничение на параметр типа:
class MyClass<T> where T : new()
{
public IEnumerable<T> GenerateTest()
{
Тогда вы можете создать новый T
Объект и установить его свойства:
var obj = new T();
foreach (var field in typeof(T).GetProperties())
{
field.SetValue(obj, ...);
}
Потому что ваш метод возвращает IEnumerable<T>
Вы не можете вернуть свой T
Объект напрямую, но нужно обернуть в коллекцию:
var list = new List<T>();
list.Add(obj);
return list;
}
}