C # - Принимая универсальный аргумент, используйте отражение, чтобы изменить свойства и вернуть универсальный аргумент - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь взять универсальный аргумент, манипулировать его свойствами через 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 Ответ

1 голос
/ 17 февраля 2012

Чтобы создать новый объект 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...