相关疑难解决方法(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万
查看次数

我应该为枚举成员使用什么AttributeTarget?

我想用我IsGPUBasedAttribute的enum成员这样:

public enum EffectType
{
    [IsGPUBased(true)]
    PixelShader,

    [IsGPUBased(false)]
    Blur
}
Run Code Online (Sandbox Code Playgroud)

但编译器不允许我使用:

[AttributeUsage (AttributeTargets.Enum, AllowMultiple = false)]
Run Code Online (Sandbox Code Playgroud)

AttributeTarget限制enum成员使用的正确价值是什么?

.net c# enums custom-attributes

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

使用Enum作为/表达式?

是否可以使用带表达式的枚举来反映枚举值?考虑这个假设的例程:

public enum Fruit
{
  Apple,
  Pear
}

public void Foo(Fruit fruit)
{
  Foo<Fruit>(() => fruit);
}

public void Foo<T>(Expression<Func<T>> expression)
{
    //... example: work with Fruit.Pear and reflect on it
}
Run Code Online (Sandbox Code Playgroud)

Bar() 会给我关于枚举的信息,但我想使用实际值.

背景:我一直在添加一些辅助方法来返回类型的CustomAttribute信息,并想知道类似的例程是否可以用于枚举.

我完全知道你可以使用枚举类型来获取CustomAttributes.

更新:

我在MVC中使用类似的概念和辅助扩展:

public class HtmlHelper<TModel> : System.Web.Mvc.HtmlHelper<TModel>
{
    public void BeginLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression)
    {
        string name = ExpressionHelper.GetExpressionText(expression);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,name将是模型的成员名称.我想用枚举做类似的事情,所以名字将是枚举'成员'.这甚至可能吗?

更新示例:

public enum Fruit
{
  [Description("I am a pear")]
  Pear
}

public void ARoutine(Fruit fruit)
{
  GetEnumDescription(() => fruit); …
Run Code Online (Sandbox Code Playgroud)

c# linq-expressions

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