c# - 从 PropertyInfo 创建通用列表 <Type>

标签 c# list generics

在我的一个类(class)中,我有以下属性:

public List<ClassP> MyPlanes { get; set; }

在另一种方法中,我有一个 propertyInfo上面的属性(函数 self 不知道 propertyinfo 来自哪里)。现在我正在尝试 create a list of classP当我只有 MyPlanes 的 propertyInfo 时.到目前为止,我的尝试似乎是徒劳的,这是我到目前为止的进展:

变量 prop 是 MyPlanes 的 PropertyInfo

public void GenerateList(PropertyInfo prop)
{
            if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericArguments().Length > 0)
            { 
                List<prop.PropertyType.GetGenericArguments().First()> myValueList = 
                    new List<prop.PropertyType.GetGenericArguments().First()>();
            }
}

创建列表(使用上面的代码)会出现以下错误 Using the generic type 'System.Collections.Generic.List<T>' requires 1 type arguments

任何帮助将不胜感激

注意:我希望列表以上面可见的语法(或类似语法)创建。我想让我的代码尽可能通用

最佳答案

要在拥有类型时创建泛型类,不能使用括号 <>因为你在编译时不知道类型。你需要做这样的事情:

var baseType = typeof(List<>);
var genericType = baseType.MakeGenericType(prop.PropertyType.GetGenericArguments().First());

现在你有了正确的类型,你可以像这样创建它:

IList myList = (IList)Activator.CreateInstance(genericType);

编辑:尽管正如 Selman22 上面所说,您已经拥有了 PropertyType ,所以你不需要获取泛型类型,除非你试图用相同的泛型参数创建一个不同的泛型类(假设你有一个 List<T> 并且需要创建一个 Dictionary<Type,T> 或其他东西)。因此,如果您遇到这种情况,我会留下我的答案。

关于c# - 从 PropertyInfo 创建通用列表 <Type>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28047161/

相关文章:

c# - 覆盖特定 API 调用的 PropertyNamingPolicy

c# - 如何禁用方法中的参数评估

c# - MethodInfo、CreateDelegate 和通用方法

java - 仅适用于特定类型的通用类

c# - Azure 数据库的 ASP.NET 数据库连接问题

c# - 创建参数化通用对象的实例,并将所有参数设置为 null

r - 从 R 中的 "key"获取 "value"

javascript - JavaScript 中的数组理解?

c# - C# 中的类和列表 <> 引用类型

java - DataSnapshot.getValue 无法解析类型 T