1

大家好,

我有一个符合我通过反思获得的特定标准的“类型”列表。每种类型都是用户在运行时可能会选择的不同功能。如果我稍后添加更多子类,这个动态实现将让我不必记住更新用户控件是这里的想法。

类型列表很好,但最好显示一些比名称更有意义的东西,因为它是用代码编写的。例如,代替“RacingBikeDesigner”,我想显示“Racing Bike Designer”,甚至可能显示与该类型相关的其他属性,如“Description”,以便用户知道该特定选择的作用。

所以我想问题是,给定一个类型,我怎样才能为用户提供更有意义的表示?我可以为每个子类添加一个静态字段并从 Type 调用它,或者我可以以某种方式使用类型转换器吗?

用户控件(ListBox、ComboBox 等)绑定到下面的返回值,但它对用户不友好:

List<string> LeftHandedUserChoices = new List<string>();
Type[] AllTypesInThisAssembly = Assembly.GetAssembly(typeof(UserChoices)).GetTypes();
foreach (Type _currentType in AllTypesInThisAssembly)
    if (_currentType.IsSubclassOf(typeof(UserChoices)))
        LeftHandedUserChoices.Add(_currentType.Name);
return LeftHandedUserChoices;

干杯,Q

4

3 回答 3

3

你有几个选项可以做到这一点。您可以使用类型上的属性进行描述,或者将其放在类型上的静态字段/属性中并使用反射检索它。

如果本地化是一个问题,您可能希望存储资源字符串名称,并在 runtme 显示资源值。

于 2011-05-11T20:30:53.860 回答
2

将自定义C# 属性添加到您的类型。

于 2011-05-11T20:30:39.970 回答
0

一种方法是让您根据您使用的命名约定解析类名(在您的情况下看起来像 Pascal)。比如RacingBikeDesigner会变成Racing Bike Designer. 这是一个解析示例

于 2011-05-11T20:31:18.493 回答