如何将单一类型的 class 属性转换为该类型的列表
How to convert class properties of single type to list of that type
给出以下 class:
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
的列表?
class 仅包含 MyType
.
类型的属性
为此,我们将使用 Reflection 获取 MyClass
.
中所有字段的 Prop1
属性中所有字符串的列表
鉴于您有 MyClass
的一些实例,您可以使用如下简单的 one-liner 获取字符串列表:
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在最后一个Select()
.
这里我们使用反射来获取类型 MyClass
内的所有字段 (.GetRunTimeFields()
),因为我们知道所有字段都是类型 MyType
我们可以将所有MyType
然后简单地 select Prop1
属性。最后我们只是 ToList()
将它作为一个列表,你当然可以将它用作 IEnumerable<string>
或数组,但希望这应该告诉你如何获得你想要的 属性与清单一样。
如果您只想拥有 MyType
的列表,那么您可以像这样跳过最后一个 Select()
:
List<MyType> myTypes = instance.GetType().GetRuntimeFields().Select(p => (MyType)p.GetValue(instance)).ToList();
给出以下 class:
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
的列表?
class 仅包含 MyType
.
为此,我们将使用 Reflection 获取 MyClass
.
Prop1
属性中所有字符串的列表
鉴于您有 MyClass
的一些实例,您可以使用如下简单的 one-liner 获取字符串列表:
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在最后一个Select()
.
这里我们使用反射来获取类型 MyClass
内的所有字段 (.GetRunTimeFields()
),因为我们知道所有字段都是类型 MyType
我们可以将所有MyType
然后简单地 select Prop1
属性。最后我们只是 ToList()
将它作为一个列表,你当然可以将它用作 IEnumerable<string>
或数组,但希望这应该告诉你如何获得你想要的 属性与清单一样。
如果您只想拥有 MyType
的列表,那么您可以像这样跳过最后一个 Select()
:
List<MyType> myTypes = instance.GetType().GetRuntimeFields().Select(p => (MyType)p.GetValue(instance)).ToList();