如何将单一类型的 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();