C# - 使用泛型参数,使用反射来修改属性,并返回泛型参数

时间:2012-02-17 07:11:19

标签: c# generics reflection

我正在尝试接受泛型参数,通过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 个答案:

答案 0 :(得分:1)

为了能够创建新的T对象,您需要将new()约束添加到type参数:

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;
    }
}