使用Reflection设置类型为List的Property

发布于 2024-07-09 12:19:51 字数 318 浏览 5 评论 0原文

如何使用反射来创建具有自定义类 (List) 的通用列表? 我需要能够增加价值并使用 propertyInfo.SetValue(..., ..., ...) 来存储它。 将这些 List<> 存储为其他数据结构会更好吗?

编辑:

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

class Foo
{
    public List<string> Bar { get; set; }
}

How can I use reflection to create a generic List with a custom class (List<CustomClass>)? I need to be able to add values and use
propertyInfo.SetValue(..., ..., ...) to store it. Would I be better off storing these List<>'s as some other data structure?

Edit:

I should have specified that the object is more like this, but Marc Gravell's answer works still.

class Foo
{
    public List<string> Bar { get; set; }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独自←快乐 2024-07-16 12:19:51
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);
    }
}
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);
    }
}
脱离于你 2024-07-16 12:19:51

以下是采用 List<> 类型并将其转换为 List 的示例:

var list = typeof(List<>).MakeGenericType(typeof(string));

Here's an example of taking the List<> type and turning it into List<string>:

var list = typeof(List<>).MakeGenericType(typeof(string));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文