Enum.GetName()的位字段?

nul*_*ken 5 c# enums parsing bit-fields

Enum.GetName()如果枚举已使用[Flags]属性进行修饰,则看起来不起作用.

文档未指定与此限制相关的任何内容.

我注意到调试器能够显示像Tree一样的东西 水果.有没有办法检索描述组合标志的文本字符串?


以下代码显示Red.

public enum FavoriteColor
{
    Red,
    Blue,
    WeirdBrownish,
    YouDoNotEvenWantToKnow,
}

var color = FavoriteColor.Red;
Console.WriteLine(Enum.GetName(typeof(FavoriteColor), color));   // => "Red"
Run Code Online (Sandbox Code Playgroud)

虽然这个没有输出任何东西....

[Flags]
public enum ACherryIsA
{
    Tree = 1,
    Fruit = 2,
    SorryWhatWasTheQuestionAgain = 4,
}

var twoOfThree = ACherryIsA.Fruit | ACherryIsA.Tree;
Console.WriteLine(Enum.GetName(typeof(ACherryIsA), twoOfThree));   // => ""
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 7

string s = twoOfThree.ToString();
Run Code Online (Sandbox Code Playgroud)

要么:

Console.WriteLine(twoOfThree);
Run Code Online (Sandbox Code Playgroud)

如果要手动执行此操作,请将值拆分为位,并测试需要添加哪些标志才能生成该标志.一点编码,但不多.

  • @zespri`Enum.ToObject(enumType,enumValue)`给出了*类型为enum*的值,用于`ToString()`等 (2认同)