IEnumerable.Cast要求为TResult

时间:2014-09-03 16:22:05

标签: c#

代码可能比散文更好地解释了......我应该提到这是.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);

1 个答案:

答案 0 :(得分:3)

不允许在运行时确定泛型的类型参数。您必须在编译时确定类型。

您的第一个示例具有显式设置类型(编译时),而您的第二个示例使用运行时值。因此,错误。