其他分享
首页 > 其他分享> > CodeGo.net>我如何使用反射设置类型为列表的属性

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