我有一个类型和一些派生类型。我想将这个派生类型的名称放在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. XSD:如何限制派生复杂类型的枚举值?
- 4. Node.js native枚举中的枚举类型
- 5. 枚举抛出“不是枚举类型”
- 6. FluentNHibernate:从派生属性返回枚举
- 7. XSD派生限制/枚举属性
- 8. 为枚举类型
- 9. psycopg2枚举类型
- 10. 枚举或类型
- 11. 上枚举类型
- 12. HTML5枚举类型
- 13. Java类枚举枚举类
- 14. MSVC常量枚举类型
- 15. 自定义枚举类型
- 16. 枚举类型在C++
- 17. 枚举类用C型串++
- 18. Perl有枚举类型吗?
- 19. 枚举类型和MySQL
- 20. 更改枚举类型值
- 21. Sqlalchemy枚举/类型匹配?
- 22. VBScript中的枚举类型
- 23. 枚举复杂类型
- 24. 扩展和枚举类型
- 25. QMetaEnum和强类型枚举
- 26. Elasticsearch - 枚举数据类型
- 27. 分配值枚举类型
- 28. 更新枚举类型
- 29. C#枚举类型安全
- 30. C++ - 映射类型枚举
你必须使用'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