CodeGo.net>我如何使用反射设置类型为列表的属性
作者:互联网
已经有一个类似的question,但是它似乎并没有询问问题所暗示的情况.
用户询问列表中的自定义类,但是他的列表对象是字符串类型.
我有一个Foo类,其中有一个Bars列表:
public class Foo : FooBase
{
public List<Bar> bars {get; set;}
public Foo() {}
}
public class Bar
{
public byte Id { get; set; }
public byte Status { get; set; }
public byte Type { get; set; }
public Bar(){}
}
我通过Activator.CreateInstance()使用反射实例化Foo.现在,我需要用Bar对象填充该酒吧列表.
Foo是使用
Assembly.GetAssembly(FooBase).GetTypes().Where(type => type.IsSubclassOf(FooBase));
酒吧是同一议会中的公共班级.我需要以某种方式获得该类型.我似乎看不到Foo中包含的列表的类型.我知道这是一张清单.我看到列表属性为List`1.
我需要查看列表包含的对象类型并相应地进行处理.
解决方法:
文本
List`1
泛型是在引擎盖下写入的方式-表示“具有1个泛型类型arg的列表,又名List”.如果您有PropertyInfo,则应进行设置.这将是封闭的通用List< Bar>.您是否只是想为此找到Bar?
如果是这样,则将在各种问题中进行讨论,包括this one;否则,请访问.复制密钥位(我更喜欢针对IList< T>进行编码,因为它处理了一些边缘情况,例如继承自List< T>):
static Type GetListType(Type type) {
foreach (Type intType in type.GetInterfaces()) {
if (intType.IsGenericType
&& intType.GetGenericTypeDefinition() == typeof(IList<>)) {
return intType.GetGenericArguments()[0];
}
}
return null;
}
标签:net-2-0,reflection,c 来源: https://codeday.me/bug/20191024/1920390.html