相关疑难解决方法(0)

非唯一枚举值

我试图掩盖edi文件中的索引位置...我有一种情况,根据情况可以在索引中有2或3个东西.使用枚举隐藏"魔术数字"会很酷,并且很惊讶你可以将多个枚举分配给相同的值,如下所示:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
Run Code Online (Sandbox Code Playgroud)

并且编译器对此很满意.我没想到这会起作用.我不需要回到枚举,所以我不担心回去,但这闻起来很时髦.为什么CLR允许枚举的多个值,我应该使用结构吗?(结构似乎比枚举更重要,这似乎有效)

c# enums struct

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

Enum.Parse返回意外成员

考虑以下代码:

namespace ConsoleApplication1 {
class Program {
    public static void Main (string[] args) {
        var en = (TestEnum)Enum.Parse(typeof(TestEnum), "AA");
        Console.WriteLine(en.ToString());
        Console.ReadKey();
    }
}

public enum TestEnum {
    AA = 0x01,
    AB = 0x02, 
    AC = 0x03,
    BA = 0x01,
    BB = 0x02,
    BC = 0x03
}
}
Run Code Online (Sandbox Code Playgroud)

如果执行此操作,变量en将获得值TestEnum.BA.现在我从中学到了枚举标志应该是唯一的,或者你得到这些意想不到的东西,但我确实不明白这里发生了什么.

更奇怪的部分是,当我将[Flags]属性添加到TestEnum时,它解决了问题并返回TestEnum.AA而不是TestEnum.BA,但对于原始枚举(更大,约200个成员)我发现这个问题这没有什么区别.

我的理解是枚举是一种值类型,所以当你定义自己的标志时,它会将内存中的值存储为0x01(对于TestEnum.AA),当你将它从对象转换为TestEnum时,它将执行查找那个标志值并找到TestEnum.BA.

运行以下行也可以确认这一点:

var en = (TestEnum)(object)TestEnum.AA;
Console.WriteLine(en.ToString());
Run Code Online (Sandbox Code Playgroud)

哪个会输出: BA

所以我的问题是:这到底发生了什么?更重要的是,为什么添加Flags属性会有所不同?

c#

9
推荐指数
1
解决办法
210
查看次数

enum.ToString返回错误的值?

我有一个简单的枚举:

public enum MyEnum
        {
            [Description("Zero")]
            Zero,
            [Description("A positive number")]
            Positive,
            [Description("Any integer")]
            AnyInteger,
            [Description("A negative number")]
            Negative,
            [Description("Reserved number")]
            Reserved =2
           }
Run Code Online (Sandbox Code Playgroud)

但是,运行以下代码:

MyEnum temp = MyEnum.AnyInteger;

string en = temp.ToString();

将en字符串设置为Reserved.

为什么会这样?

是否有其他方法将字符串设置为使用的枚举字符串(在本例中为AnyInteger)?

c# enums tostring

4
推荐指数
1
解决办法
1257
查看次数

标签 统计

c# ×3

enums ×2

struct ×1

tostring ×1