在我的一门课中,我具有以下属性:
public List<ClassP> MyPlanes { get; set; }
在另一种方法中,我具有propertyInfo
上述属性的属性(函数self不知道propertyinfo的来源)。现在,create a list of classP
当我只有propertyInfo为时,我正在尝试MyPlanes
。到目前为止,我的尝试似乎是徒劳的,这就是我得到沙发的程度:
可变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>
或。某物)。因此,如果您遇到这种情况,我会留下我的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句