相关疑难解决方法(0)

获得Enum价值的属性

我想知道是否可以获取枚举值的属性而不是枚举本身的属性?例如,假设我有以下枚举:

using System.ComponentModel; // for DescriptionAttribute

enum FunkyAttributesEnum
{
    [Description("Name With Spaces1")]
    NameWithoutSpaces1,    
    [Description("Name With Spaces2")]
    NameWithoutSpaces2
}
Run Code Online (Sandbox Code Playgroud)

我想要的是枚举类型,产生2元组的枚举字符串值及其描述.

价值很容易:

Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
    Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
Run Code Online (Sandbox Code Playgroud)

但是如何获取描述属性的值,以填充Tuple.Desc?如果属性属于枚举本身,我可以想到如何做到这一点,但我不知道如何从枚举的值中获取它.

c# reflection enums .net-attributes

453
推荐指数
9
解决办法
27万
查看次数

将枚举转换为字符串

在.NET 3.5中将Enum转换为String的首选方法是什么?

  • Enum.GetName
  • Enum.Format

为什么我更喜欢其中一个呢?一个表现更好吗?

.net enums

155
推荐指数
9
解决办法
18万
查看次数

MVC.net在视图中获取枚举显示名称,而不必在视图中引用枚举类型

我在ViewModelBase类中有以下辅助方法,它由其他视图模型继承:

public string GetEnumName<T>(Enum value)
        {
            Type enumType = typeof(T);
            var enumValue = Enum.GetName(enumType, value);
            MemberInfo member = enumType.GetMember(enumValue)[0];

            var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
            var outString = ((DisplayAttribute)attrs[0]).Name;

            if (((DisplayAttribute)attrs[0]).ResourceType != null)
            {
                outString = ((DisplayAttribute)attrs[0]).GetName();
            }

            return outString;
        }
Run Code Online (Sandbox Code Playgroud)

然后我从这样的视图中调用它:

<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
Run Code Online (Sandbox Code Playgroud)

问题是 - 我可以使用这种方法,所以我不必告诉它的类型enum吗?基本上我想为所有人做这个enum:

@ Model.GetEnumDisplayName(Model.wheteverEnum)

typeof,不T,不需要Enums在视图中添加对命名空间的引用...

可能?

generics asp.net-mvc enums c#-4.0 asp.net-mvc-3

25
推荐指数
3
解决办法
3万
查看次数

多个枚举说明

我已经定义了以下内容enum:

public enum DeviceType
{
    [Description("Set Top Box")]
    Stb = 1,
    Panel = 2,
    Monitor = 3,
    [Description("Wireless Keyboard")]
    WirelessKeyboard = 4
}
Run Code Online (Sandbox Code Playgroud)

我正在利用该Description属性允许我提取更多用户可读的枚举版本以在UI中显示.我使用以下代码获得描述:

var fieldInfo = DeviceType.Stb.GetType().GetField(DeviceType.Stb.ToString());

var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);

var description = (attributes.Length > 0 ? attributes[0].Description : DeviceType.Stb.ToString());
Run Code Online (Sandbox Code Playgroud)

上面的代码将给我:description = "Set Top Box".如果没有Description设置属性,它将为我提供枚举的字符串值.

我现在想为每个枚举添加第二个/自定义属性(为了示例,称为"值").例如:

public enum DeviceType
{
    [Description("Set Top Box")]
    [Value("19.95")]
    Stb = 1,
    [Value("99")]
    Panel = 2,
    [Value("199.99")]
    Monitor = 3,
    [Description("Wireless Keyboard")]
    [Value("20")]
    WirelessKeyboard …
Run Code Online (Sandbox Code Playgroud)

c# enums

22
推荐指数
2
解决办法
8537
查看次数

如何使MVC3 DisplayFor显示Enum的显示属性的值?

在MVC3-Project中,我使用带有display-Attributes的枚举:

public enum Foo {
  [Display(Name = "Undefined")]
  Undef = 0,

  [Display(Name = "Fully colored")]
  Full = 1
}
Run Code Online (Sandbox Code Playgroud)

模型类有一个使用此枚举的属性:

public Foo FooProp { get; set; }
Run Code Online (Sandbox Code Playgroud)

视图使用模型类并通过显示属性

@Html.DisplayFor(m => m.FooProp)
Run Code Online (Sandbox Code Playgroud)

现在,最后,我的问题:

我如何使.DisplayFor()显示Display-Attribute中的字符串而不是仅显示枚举的值名称?(它应显示"未定义"或"全彩色",但显示"Undef"或"Full").

谢谢你的提示!

enums attributes asp.net-mvc-3

16
推荐指数
1
解决办法
1万
查看次数

使用AutoMapper将字符串映射到枚举

我有以下类domain和Dto类:

public class Profile
{
   public string Name { get; set; }
   public string SchoolGrade { get; set; } 
}

public class ProfileDTO
{
   public string Name { get; set; }
   public SchoolGradeDTO SchoolGrade { get; set; } 
}

public enum SchoolGradeDTO 
{
   [Display(Name = "Level One"]
   LevelOne,
   [Display(Name = "Level Two"]
   LevelTwo,
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法:

 Mapper.CreateMap<Profile, ProfileDTO>()
       .ForMember(d => d.SchoolGrade , op => op.MapFrom(o => o.SchoolGrade))
Run Code Online (Sandbox Code Playgroud)

之后,我收到以下错误:

未找到请求的值"二级".

如何正确映射?

.net c# automapper

13
推荐指数
2
解决办法
2万
查看次数

带有整数字符串的枚举

我有这样一个公众enum:

public enum occupancyTimeline
{
    TwelveMonths,
    FourteenMonths,
    SixteenMonths,
    EighteenMonths
}
Run Code Online (Sandbox Code Playgroud)

我将用于这样的DropDown菜单:

@Html.DropDownListFor(model => model.occupancyTimeline, 
   new SelectList(Enum.GetValues(typeof(CentralParkLCPreview.Models.occupancyTimeline))), "")
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找我的价值观

12个月,14个月,16个月,18个月而不是TweleveMonths,十四个月,十六个月,十八个月

我怎么做到这一点?

c# asp.net asp.net-mvc

10
推荐指数
1
解决办法
995
查看次数

MVC EnumDropDownListFor与Enum Display描述属性作为值

我有一个带显示描述属性的枚举,

public enum CSSColours
    {
        [Display(Description = "bg-green")]
        Green,

        [Display(Description = "bg-blue")]
        Blue,
    }
Run Code Online (Sandbox Code Playgroud)

现在我想将此枚举绑定到DropDownlist,在下拉项目显示文本和描述中显示枚举值(绿色,蓝色)作为项目值(bg-green,bg-blue).

当我使用EnumDropDownListFor帮助方法绑定Dropdown时

@Html.EnumDropDownListFor(c => dm.BgColor)
Run Code Online (Sandbox Code Playgroud)

它将项值设置为枚举值(0,1),并且找不到将值设置为显示描述的方法.

如何将值设置为Enum Display Description属性?

c# asp.net-mvc enums razor

6
推荐指数
1
解决办法
6109
查看次数

如何将<select>值绑定到ASP.NET Core MVC中枚举中每个项的名称?

我有一些国家的枚举:

public enum Countries
{
    USA,
    Canada,
    Mexico,
}
Run Code Online (Sandbox Code Playgroud)

然后我在我的模型上有一个属性:

[Required]
public string Country { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我看来,我有:

@Html.DropDownList("Country", Html.GetEnumSelectList(typeof(Countries)) ...)
Run Code Online (Sandbox Code Playgroud)

我想value每一个option在生成select是从每个项目的名称Countries enum.默认情况下,该值是从零开始的整数.

razor asp.net-core-mvc asp.net-core

6
推荐指数
2
解决办法
4434
查看次数

如何显示枚举显示属性的名称

这是我的枚举.

public enum ContractType
{
    [Display(Name = "Permanent")]
    Permanent= 1,

    [Display(Name = "Part Time")]
    PartTime= 2,

}
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的代码获取显示名称.

 string x = Enum.GetName(typeof(ContractType), 2);
Run Code Online (Sandbox Code Playgroud)

但它总是返回" PartTime ".其实我想得到display属性的名称.对于上面的示例,x应分配为Part Time

我看到有大量代码的解决方案.这不是简单/一线解决方案吗?

请告诉我一个方向.

c# enums

5
推荐指数
1
解决办法
1万
查看次数

无法在剃刀视图中获取枚举显示名称属性

我有一个带有 Display(Name=) 的枚举,我希望在 Razor 视图中显示它,但我只得到了值。

 public enum Gender
 {
    [Display(Name = "Man woman")]
    EveryOne = 0,
    [Display(Name = "Man")]
    Man = 1,
    [Display(Name = "Woman")]
    Woman = 2
 }
Run Code Online (Sandbox Code Playgroud)

剃刀:

 Is for: @Model.LectureGig.Gender
Run Code Online (Sandbox Code Playgroud)

Html 结果是:

适用于:所有人

代替:

适用于: 男人 女人

c# asp.net-mvc enums razor

2
推荐指数
1
解决办法
9430
查看次数

如何从枚举中获取指定的字符串值

我创建了这个枚举

 public enum Days
    {
        [Display("Monday")]
        Mon,
        [Display("Tuesday")]
        Tue,
        [Display("Wednesday")]
        Wed,
        [Display("Thursday")]
        Thu,
        [Display("Friday")]
        Fri,
        [Display("Satrday")]
        Sat,
    }
Run Code Online (Sandbox Code Playgroud)

我想得到字符串"星期一".我试过这样做

Console.WriteLine(Days.mon);
Run Code Online (Sandbox Code Playgroud)

但是给了我"星期一"而不是"星期一".星期一有没有办法获得字符串?

c#

0
推荐指数
1
解决办法
1096
查看次数

如何使用包含空格的枚举项名称?

如何使用包含空格的枚举项名称?

enum Coolness
{
    Not So Cool = 1,
    VeryCool = 2,
    Supercool = 3
}
Run Code Online (Sandbox Code Playgroud)

我通过下面的代码获取Enum项目名称

string enumText = ((Coolness)1).ToString()
Run Code Online (Sandbox Code Playgroud)

我不会改变这段代码,但上面的代码应该返回Not So Cool.有没有使用oops概念来实现这一目标?在这里,我不想更改检索语句.

.net c# oop enums

0
推荐指数
1
解决办法
1万
查看次数