일부 ASP.NET MVC 3을 수행하고 있고 열거 형 작업을위한 몇 가지 확장 메서드를 설정하고 있습니다. 그 중 하나는 [Description] 특성을 찾는 화려한 ToString()이고 다른 하나는 Html.DropDownList()에서 사용하기 위해 열거 형에서 SelectList를 작성합니다. 이 두 메소드는 모두 동일한 정적 클래스에 있습니다.다른 일반 확장 메서드의 매개 변수에 대한 일반 확장 메서드 호출
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'없이 확장 방법에 대한 정의를 포함하지 않는 '으로 getDescription'형식의 첫 번째 인수를 받아들이는 'TEnum'을 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?)
이것은 놀라운 일이 아니지만 GetDescription을 인식하는 컴파일러를 얻는 방법을 모르겠습니다.)를 유효한 전자로 ToSelectList()의 enumval 매개 변수에 대한 xtension 메소드입니다. GetDescription()의 내장을 개인 정적 메서드로 옮기고 확장 메서드를 래퍼로 만들면이 작업을 수행 할 수 있음을 알았지 만 일반적인 확장 메서드를 연결하는 것은 제대로 수행하는 방법을 알고 있어야하는 것처럼 보입니다.
변수 e는 유형 TEnum입니다. GetDescription 확장 메서드는 Nullable이고 TEnum은 아닙니다. GetDescription을 TEnum (Nullable이 아님)의 확장으로 만들 수 있습니까? ? –