C# 使用枚举友好名称

C# 使用枚举友好名称,c#,enums,asp.net-mvc-5,C#,Enums,Asp.net Mvc 5,我正在尝试以用户友好的可读名称使用enum 但我不知道如何将它与我的观点联系起来 这就是我到目前为止所做的: public enum MyDayOfWeek { Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, SunTilFir = 7, } public class Course {

我正在尝试以用户友好的可读名称使用enum 但我不知道如何将它与我的观点联系起来

这就是我到目前为止所做的:

public enum MyDayOfWeek
{
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    SunTilFir = 7,

}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public int Hour { get; set; }
    public MyDayOfWeek Days { get; set; }
}

public static class ChangeEnumName
{
    public static string EnumValue(this MyDayOfWeek e)
    {
        switch (e)
        {
            case MyDayOfWeek.SunTilFir:
                return "Sunday until Friday ";
        }
        return "Horrible Failure!!";
    }
}

如何将ChangeEnum名称绑定到我的视图?

您可以在模型上创建一个只读属性,从中返回FriendlyName

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public int Hour { get; set; }
    public MyDayOfWeek Days { get; set; }

    public string DaysFriendlyName
    {
         get
         {
              switch(this.Days)
              {
                  case MyDayOfWeek.SunTilFir:
                         return "Sunday until Friday ";
              }
              return "Horrible Failure!!";
         }
     }
}
最好不要在readonly属性的主体中实现这个开关,但是可以为它创建一个扩展方法?所以你的身体会像这样:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
以及扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

扩展方法的好处在于,您可以从razor视图中释放readonly属性并直接绑定到扩展方法(在razor视图中输入正确的“using”以使其生效)。

您可以在模型上创建一个readonly属性,从中返回FriendlyName

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public int Hour { get; set; }
    public MyDayOfWeek Days { get; set; }

    public string DaysFriendlyName
    {
         get
         {
              switch(this.Days)
              {
                  case MyDayOfWeek.SunTilFir:
                         return "Sunday until Friday ";
              }
              return "Horrible Failure!!";
         }
     }
}
最好不要在readonly属性的主体中实现这个开关,但是可以为它创建一个扩展方法?所以你的身体会像这样:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
以及扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

扩展方法的好处在于,您可以从razor视图中释放readonly属性并直接绑定到扩展方法(在razor视图中输入正确的“using”以使其生效)。

您可以在模型上创建一个readonly属性,从中返回FriendlyName

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public int Hour { get; set; }
    public MyDayOfWeek Days { get; set; }

    public string DaysFriendlyName
    {
         get
         {
              switch(this.Days)
              {
                  case MyDayOfWeek.SunTilFir:
                         return "Sunday until Friday ";
              }
              return "Horrible Failure!!";
         }
     }
}
最好不要在readonly属性的主体中实现这个开关,但是可以为它创建一个扩展方法?所以你的身体会像这样:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
以及扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

扩展方法的好处在于,您可以从razor视图中释放readonly属性并直接绑定到扩展方法(在razor视图中输入正确的“using”以使其生效)。

您可以在模型上创建一个readonly属性,从中返回FriendlyName

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public int Hour { get; set; }
    public MyDayOfWeek Days { get; set; }

    public string DaysFriendlyName
    {
         get
         {
              switch(this.Days)
              {
                  case MyDayOfWeek.SunTilFir:
                         return "Sunday until Friday ";
              }
              return "Horrible Failure!!";
         }
     }
}
最好不要在readonly属性的主体中实现这个开关,但是可以为它创建一个扩展方法?所以你的身体会像这样:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
以及扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

扩展方法的好处在于,您可以从razor视图中释放readonly属性并直接绑定到扩展方法(在razor视图中输入正确的“using”以使其工作)。

您可以尝试这样做:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
因此,您可以在视图中将其用作扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

您可以尝试这样做:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
因此,您可以在视图中将其用作扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

您可以尝试这样做:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
因此,您可以在视图中将其用作扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()

您可以尝试这样做:

public string DaysFriendlyName
{
    get
    {
         return this.Days.ToFriendlyName();
    }
}
public enum MyDayOfWeek
{
    [UserFriendlyName("Sunday")]
    Sunday = 0,

    [UserFriendlyName("Monday")]
    Monday = 1,

    [UserFriendlyName("Tuesday")]
    Tuesday = 2,

    [UserFriendlyName("Wednesday")]
    Wednesday = 3,

    [UserFriendlyName("Thursday")]
    Thursday = 4,

    [UserFriendlyName("Friday")]
    Friday = 5,

    [UserFriendlyName("Saturday")]
    Saturday = 6,

    [UserFriendlyName("Sunday until Friday")]
    SunTilFir = 7
}

public class UserFriendlyNameAttribute : Attribute
{
    public string Text { get; set; }

    public UserFriendlyNameAttribute(string text)
    {
        Text = text;
    }
}

public static class EnumExtensions
{
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek)
    {
        return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString());
    }

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName)
    {
        var memInfo = type.GetMember(memberName);
        if (memInfo.Length == 0)
            return string.Empty;

        var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false);
        if (attributes.Length == 0)
            return null;

        return ((UserFriendlyNameAttribute) attributes[0]).Text;
    }
}
因此,您可以在视图中将其用作扩展方法:

namespace UniPro.Models
{    
    public static class DaysEnumExtensions
    {
         public static string ToFriendlyName(this MyDayOfWeek days)
         {
              switch (days)
              {
               //....
              }
         }
     }
}
MyDayOfWeek.SunTilFir.GetUserFriendlyName()



看起来您正在尝试为枚举类型创建扩展方法。我认为这在C#中是无效的。怎么做?使用enum的友好名称?使用位值并创建一个值
工作日
,该值可以写为
星期一|星期二|星期三|星期四|星期五
星期六和星期日
?虽然我不能说,但我确定您正在尝试做什么。您介意使用资源字符串将枚举值字符串用作查找键吗?您面临什么问题?看起来您正在尝试为枚举类型创建扩展方法。我认为这在C#中是无效的。怎么做?使用enum的友好名称?使用位值并创建一个值
工作日
,该值可以写为
星期一|星期二|星期三|星期四|星期五
星期六和星期日
?虽然我不能说,但我确定您正在尝试做什么。您介意使用资源字符串将枚举值字符串用作查找键吗?您面临什么问题?看起来您正在尝试为枚举类型创建扩展方法。我认为这在C#中是无效的。怎么做?使用enum的友好名称?使用位值并创建一个值
工作日
,该值可以写为
星期一|星期二|星期三|星期四|星期五
星期六和星期日
?虽然我不能说,但我确定您正在尝试做什么。您介意使用资源字符串将枚举值字符串用作查找键吗?您面临什么问题?看起来您正在尝试为枚举类型创建扩展方法。我认为这在C#中是无效的。怎么做?使用enum的友好名称?使用位值并创建一个值
工作日
,该值可以写为
星期一|星期二|星期三|星期四|星期五
星期六和星期日
?虽然我不能说,但我确定您正在尝试做什么。您介意使用资源字符串将枚举值字符串用作查找键吗?您面临什么问题?我应该为“@using”使用什么命名空间?只需为
DaysEnumExtensions
类添加using即可。请注意,扩展方法不能与DisplayFor之类的controltemplates一起使用。在这种情况下,您将需要只读property@usingUniPro.Models.DaysEnumExtensions我收到以下错误:using namespace指令只能应用于名称空间;'UniPro.Models.DaysEnumExtensions是一种类型而不是名称空间,所以您的名称空间是UniPro.Models?那么使用应该是@using UniPro.Models。请参阅帖子中的我的编辑。我应该为“@Using”使用什么名称空间?只需为
DaysEnumExtensions
类添加Using即可。请注意,扩展方法不能与DisplayFor之类的controltemplates一起使用。在这种情况下,您将需要只读property@usingUniPro.Models.DaysEnumExtensions我收到以下错误:using namespace指令只能应用于名称空间;'UniPro.Models.DaysEnumExtensions是一种类型而不是名称空间,所以您的名称空间是UniPro.Models?那么使用应该是@using UniPro.Models。请参阅文章中的我的编辑。我应该为“@Using”使用什么名称空间?只需添加usin即可