給定以下課程:
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
}
有沒有辦法可以把它變成 typeMyType
或 prop的串列Prop1
?
該類僅包含型別的屬性MyType
。
uj5u.com熱心網友回復:
為此,我們將使用反射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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471248.html
上一篇:第一次查詢相關資料,結果重復資料
下一篇:性能LINQ異步等待