我正在做一些 ASP.NET MVC 3,并且我正在设置几个扩展方法来使用 Enums。其中一个是一个花哨的 ToString(),它查找 [Description] 属性,另一个从枚举构建一个 SelectList 以与 Html.DropDownList() 一起使用。这两种方法都在同一个静态类中。
public static SelectList ToSelectList<TEnum>(this TEnum? enumval) where TEnum : struct {
var values = from TEnum e in Enum.GetValues(typeof(TEnum)) select new { ID = e, Name = e.GetDescription() };
SelectList list = new SelectList(values, "ID", "Name", enumval);
return list;
}
public static string GetDescription<TEnum>(this TEnum? enumval) where TEnum : struct {
//Some reflection that fetches the [Description] attribute, or returns enumval.ToString() if it isn't defined.
}
但是编译器会大喊大叫Name = e.GetDescription()
,说...
“TEnum”不包含“GetDescription”的定义,并且找不到接受“TEnum”类型的第一个参数的扩展方法“GetDescription”(您是否缺少 using 指令或程序集引用?)
这并不令人意外,但我不确定如何让编译器将 GetDescription() 识别为 ToSelectList() 的 enumval 参数的有效扩展方法。我意识到我可以通过将 GetDescription() 的内容移动到私有静态方法中来完成这项工作,并使扩展方法只是对其的包装,但是链接通用扩展方法似乎是我应该知道如何正确执行的事情。