我有一個類型和一些派生類型。我想將這個派生類型的名稱放在WPF的ComboBox控件中。什麼是正確的方法來做到這一點?目前我正在使用Assembly命名空間來獲取這些類型的名稱。枚舉派生類型
Q
枚舉派生類型
0
A
回答
4
的第一步是獲得Type
對象爲每個組件搜索類型的派生類型。 Pavel的答案爲你提供了一個很好的基礎,儘管他的解決方案只給出了直接的子類型,而不是繼承類型的更深層次類型,只有類型與基類型定義在相同的程序集中。這裏有一個稍微更新的版本:
var baseType = typeof(Base);
var currentlyLoadedAssemblies = AppDomain.Current.GetAssemblies();
var relevantTypes = currentlyLoadedAssemblies
.SelectMany (assembly => assembly.GetTypes())
.Where(type => baseType.IsAssignableFrom(type));
Types = relevantTypes.ToList();
不,我們有所有的類型,我們可以將它們綁定到一個WPF組合框。我們將綁定到Type
對象本身,而不是從類型名稱中提取字符串,所以當用戶選擇一個對象時,我們將準備好所選的Type對象。我們將告訴ComboBox顯示Type's
Name
屬性。
public List<Type> Types {get;set;}
public Type SelectedType {get;set;}
<ComboBox ItemsSource="{Binding Types}"
SelectedItem="{Binding SelectedType}"
DisplayMemberPath="Name" />
+0
關於接口 - 如果OP不需要接口和它們的實現,它是一個簡單的修復過濾器,但是現在沒有理由將它與代碼混淆。 – 2014-10-05 20:31:01
4
您可以使用反射來做到這一點:
var type = typeof(SomeType);
IEnumerable<string> exporters = type.Assembly
.GetTypes()
.Where(t => t.IsSubclassOf(type))
.Select(t => t.Name);
這隻會在其中包含源型
相關問題
- 1. 派生類的基類枚舉值?
- 2. 在派生類中聲明枚舉
- 3. 枚舉派生調試
- 4. 獲取底層/派生類型的枚舉?
- 5. XSD:如何限制派生複雜類型的枚舉值?
- 6. 類型枚舉
- 7. Ç枚舉(枚舉類型定義)的
- 8. 枚舉vs強類型枚舉
- 9. 枚舉拋出「不是枚舉類型」
- 10. Node.js native枚舉中的枚舉類型
- 11. FluentNHibernate:從派生屬性返回枚舉
- 12. XSD派生限制/枚舉屬性
- 13. 上枚舉類型
- 14. HTML5枚舉類型
- 15. 爲枚舉類型
- 16. 枚舉或類型
- 17. psycopg2枚舉類型
- 18. 基本類型生鏽枚舉
- 19. Java類枚舉枚舉類
- 20. 具有泛型類型的泛型枚舉枚舉
- 21. 從2個派生類中選擇正確的枚舉列表
- 22. Elasticsearch - 枚舉數據類型
- 23. C#枚舉類型安全
- 24. 枚舉複雜類型
- 25. 枚舉類型錯誤C2677
- 26. 枚舉類用C型串++
- 27. 枚舉類型別名
- 28. Sqlalchemy枚舉/類型匹配?
- 29. 顯示枚舉類型
- 30. 枚舉和值類型
你必須使用'Relections'做到這一點。在枚舉類型列表時,輸入superClass = myClass.GetType()。BaseType'來獲取基類名。如果他們的基類名稱與您的基類名稱相匹配,那麼就得到他們的名字!非常容易 – Transcendent 2014-10-05 19:49:23
@KingKing:查看更新的評論 – Transcendent 2014-10-05 19:53:03
@KingKing:'Reflection'是一個命名空間,它的功能是潛入類型。因此,任何類似的操作即使可以在不使用該名稱空間的情況下完成,在技術上也稱爲反射。我們也在Java中使用它 – Transcendent 2014-10-05 19:56:51