0
的擴展方法,我用ToStringEnum擴展,如:徵集枚舉
public static string ToStringEnum(this YearOfSchooling value)
{
switch (value)
{
}
}
public static string ToStringEnum(this Grade value)
{
switch (value)
{
}
}
等等每一個枚舉。
現在我想創建泛型TML擴展來讀取這個枚舉WHERE T是枚舉。
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof (T), value, true);
}
public static MvcHtmlString DisplayEnumRowWithDisplayName<TModel, TValue, T>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where T : struct, IEnumConverter
{
var metaData = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var model = metaData.Model;
var displayName = metaData.DisplayName;
string parsedValue = string.Empty;
if (model != null)
{
if (!string.IsNullOrEmpty(model.ToString()))
{
var parsedEnum = EnumUtils.ParseEnum<T>(model.ToString());
var type = typeof(T);
parsedValue = type.GetMethod("ToStringEnum", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
}
}
return new MvcHtmlString(
"<div class=\"control-group\"><label class=\"control-label\">{0}</label><div class=\"controls\"><span class=\"input-xlarge uneditable-input\">{1}</span></div></div>"
.FormatWith(displayName, parsedValue));
}
但我不知道如何調用ToStringEnum方法。我嘗試過:
parsedValue = type.GetMethod("ToStringEnum", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
但沒有工作,我沒有想法。
擴展方法是從..它們不直接與類相關聯的編譯器糖衣對此擴展方法進行了定義..因此,對該類型的反思將不會以任何方式爲您提供擴展方法的訪問權..您必須考慮替代方案..這將取決於您的實際需要。 – 2014-11-05 05:48:40