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;
    }
}
Другие вопросы по тегам