Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataAnnotations:读取代码中的Name属性_C#_Data Annotations - Fatal编程技术网

C# DataAnnotations:读取代码中的Name属性

C# DataAnnotations:读取代码中的Name属性,c#,data-annotations,C#,Data Annotations,我已使用Display DataAnnotation属性修饰了以下枚举: public enum RequiredOptions { [Display(Name="Optional",Description ="Optional")] Optional, [Display(Name="Not Used",Description ="Not Used")] NotUsed, [Display(Name="Required",Description ="Req

我已使用Display DataAnnotation属性修饰了以下枚举:

public enum RequiredOptions
{
    [Display(Name="Optional",Description ="Optional")]
    Optional,
    [Display(Name="Not Used",Description ="Not Used")]
    NotUsed,
    [Display(Name="Required",Description ="Required")]
    Required
}
我想在代码中读取给定枚举值的Display属性的Name值。我该怎么做

    public static string DisplayRequiredOptionName(RequiredOptions opt)
    {
        // Return the value of Name from the display attribute from opt
    }

好的,在深入挖掘MVC源代码(请参阅src\System.Web.MVC\Html\SelectExtensions.cs,请参阅GetDisplayName())之后,我的工作如下:

    public static string GetEnumDisplayName<T>(T enumInstance)
    {
        return GetDisplayName(enumInstance.GetType().GetField(enumInstance.ToString()));
    }

    private static string GetDisplayName(FieldInfo field)
    {
        DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false);
        if (display != null)
        {
            string name = display.GetName();
            if (!String.IsNullOrEmpty(name))
            {
                return name;
            }
        }

        return field.Name;
    }
公共静态字符串GetEnumDisplayName(T enumInstance)
{
返回GetDisplayName(enumInstance.GetType().GetField(enumInstance.ToString());
}
私有静态字符串GetDisplayName(FieldInfo字段)
{
DisplayAttribute display=field.GetCustomAttribute(继承:false);
如果(显示!=null)
{
字符串名称=display.GetName();
如果(!String.IsNullOrEmpty(名称))
{
返回名称;
}
}
返回字段名称;
}

好吧,在深入挖掘MVC源代码(请参阅src\System.Web.MVC\Html\SelectExtensions.cs,请参阅GetDisplayName())之后,以下是我要做的工作:

    public static string GetEnumDisplayName<T>(T enumInstance)
    {
        return GetDisplayName(enumInstance.GetType().GetField(enumInstance.ToString()));
    }

    private static string GetDisplayName(FieldInfo field)
    {
        DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false);
        if (display != null)
        {
            string name = display.GetName();
            if (!String.IsNullOrEmpty(name))
            {
                return name;
            }
        }

        return field.Name;
    }
公共静态字符串GetEnumDisplayName(T enumInstance)
{
返回GetDisplayName(enumInstance.GetType().GetField(enumInstance.ToString());
}
私有静态字符串GetDisplayName(FieldInfo字段)
{
DisplayAttribute display=field.GetCustomAttribute(继承:false);
如果(显示!=null)
{
字符串名称=display.GetName();
如果(!String.IsNullOrEmpty(名称))
{
返回名称;
}
}
返回字段名称;
}

我认为您通常会使用反射和GetCustomAttributes()来实现这一点。我认为您通常会使用反射和GetCustomAttributes()来实现这一点。