提问人:Jonas Mohammed 提问时间:5/4/2022 更新时间:5/4/2022 访问量:805
如何将单一类型的类属性转换为该类型的列表
How to convert class properties of single type to list of that type
问:
给定以下类:
class MyClass {
readonly MyType Object1 = new MyType { Prop1="Prop I want", Prop2="Prop I dont want"}
readonly MyType Object2 = new MyType { Prop1="Prop I want", Prop2="Prop I dont want"}
readonly MyType Object3 = new MyType { Prop1="Prop I want", Prop2="Prop I dont want"}
readonly MyType Object4 = new MyType { Prop1="Prop I want", Prop2="Prop I dont want"}
// etc, there are 100+ in this class, all of the type MyType
}
有没有办法将其转换为类型或道具的列表?MyType
Prop1
该类仅包含 类型的属性。MyType
答:
2赞
dcronqvist
5/4/2022
#1
为此,我们将使用 Reflection 来获取 中所有字段属性中所有字符串的列表。Prop1
MyClass
假设你有一些实例 ,你可以用一个简单的单行代码来获取字符串列表,如下所示:MyClass
MyClass instance = new MyClass(); // This could of course be gotten from somewhere else.
List<string> prop1s = instance.GetType().GetRuntimeFields().Select(p => (MyType)p.GetValue(instance)).Select(p => p.Prop1).ToList();
如果你突然想在里面获取一些其他属性,你可以简单地更改你在最后一个中选择的属性。MyType
Select()
在这里,我们使用反射来获取类型内的所有字段 (),并且由于我们知道所有字段都是类型,因此我们可以将所有字段转换为该类型,然后只需选择属性即可。最后,我们只是把它作为一个列表,你当然可以把它作为一个或一个数组,但希望这应该向你展示你如何获得你想要的属性作为列表。.GetRunTimeFields()
MyClass
MyType
MyType
Prop1
ToList()
IEnumerable<string>
相反,如果您只想有一个列表,那么您可以跳过最后一个,如下所示:MyType
Select()
List<MyType> myTypes = instance.GetType().GetRuntimeFields().Select(p => (MyType)p.GetValue(instance)).ToList();
评论
private readonly