代码可能比散文更好地解释了......我应该提到这是.NET 3.5。
编辑: 正确形成代码可以更好地解释它...对于初始帖子中的代码感到抱歉,并且感谢我不应该投票给我,因为我应得的。 / p>
// WhichBox is a combobox that I am building a datasource for. I want to
// display a 'pretty' name for my enum values, but get the actual enum
// value back upon selection
MyEnum typ;
List<KeyValuePair<MyEnum, string>> typs =
new List<KeyValuePair<MyEnum, string>>();
KeyValuePair<MyEnum, string> kvp;
WhichBox.Items.Clear();
foreach (string name in Enum.GetNames(typeof(MyEnum)))
{
typ = (MyEnum)Enum.Parse(typeof(MyEnum), name, true);
kvp = new KeyValuePair<MyEnum, string>
(typ, This.PrettyName(typ.ToString(), " "));
typs.Add(kvp);
}
WhichBox.DataSource = typs;
WhichBox.DisplayMember = "Value";
WhichBox.ValueMember = "Key";
这有效:
// Default to my desired value
WhichBox.SelectedItem =
WhichBox.Items.Cast<KeyValuePair<MyEnum, string>>().First(
x => x.Key == MyEnum.MyDesiredDefault);
这给出了一个我不明白的错误:操作员&#39;&lt;&#39;不能应用于类型&#39;方法组的操作数&#39;和&#39; System.Type&#39;。
WhichBox.SelectedItem =
WhichBox.Items.Cast<kvp.GetType()>().First(
x => x.Key == MyEnum.CapeToUser);
答案 0 :(得分:3)
不允许在运行时确定泛型的类型参数。您必须在编译时确定类型。
您的第一个示例具有显式设置类型(编译时),而您的第二个示例使用运行时值。因此,错误。