使用Reflection设置List类型的Property<CustomClass>

问题描述 投票:0回答:2

如何使用反射来创建具有自定义类(List)的通用列表? 我需要能够增加价值并使用

propertyInfo.SetValue(..., ..., ...)
来存储它。 将这些 List<> 存储为其他数据结构会更好吗?

编辑:

我应该指定该对象更像这样,但 Marc Gravell 的答案仍然有效。

class Foo
{
    public List<string> Bar { get; set; }
}
c# reflection .net-2.0
2个回答
19
投票
class Foo
{
    public string Bar { get; set; }
}
class Program
{
    static void Main()
    {
        Type type = typeof(Foo); // possibly from a string
        IList list = (IList) Activator.CreateInstance(
            typeof(List<>).MakeGenericType(type));

        object obj = Activator.CreateInstance(type);
        type.GetProperty("Bar").SetValue(obj, "abc", null);
        list.Add(obj);
    }
}

1
投票

这是采用

List<>
类型并将其转换为
List<string>
的示例:

var list = typeof(List<>).MakeGenericType(typeof(string));
© www.soinside.com 2019 - 2024. All rights reserved.