如果存在多个具有相同值的枚举常量,是否存在一个常数我得到的逻辑?
我尝试了下面的变化,但无法得到合理的逻辑.
public class Program
{
public static void Main(string[] args)
{
Test a = 0;
Console.WriteLine(a);
}
}
Run Code Online (Sandbox Code Playgroud)
enum Test
{
a1=0,
a2=0,
a3=0,
a4=0,
}
Run Code Online (Sandbox Code Playgroud)
输出:
a2
Run Code Online (Sandbox Code Playgroud)
enum Test
{
a1=0,
a2=0,
a3,
a4=0,
}
Run Code Online (Sandbox Code Playgroud)
输出:
a4
Run Code Online (Sandbox Code Playgroud)
enum Test
{
a1=0,
a2=0,
a3,
a4,
}
Run Code Online (Sandbox Code Playgroud)
输出:
a2
Run Code Online (Sandbox Code Playgroud)
enum Test
{
a1=0,
a2=0,
a3,
a4
}
Run Code Online (Sandbox Code Playgroud)
输出:
a1
Run Code Online (Sandbox Code Playgroud) 我找到了一个很有趣的东西 - 让我们说:
enum Myenum { a, b, c= 0 }
public class Program
{
static void Main(string[] args)
{
Myenum ma = Myenum.a;
Console.WriteLine(ma);
}
}
Run Code Online (Sandbox Code Playgroud)
其结果就是一个,为什么?
如果我说:
enum Myenum { a, b=0, c}
public class Program
{
static void Main(string[] args)
{
Myenum ma = Myenum.a;
Console.WriteLine(ma);
}
}
Run Code Online (Sandbox Code Playgroud)
结果变成"b",为什么?
我想知道有没有办法防止enum重复键编译?
例如,enum下面将编译
public enum EDuplicates
{
Unique,
Duplicate = 0,
Keys = 1,
Compilation = 1
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码
Console.WriteLine(EDuplicates.Unique);
Console.WriteLine(EDuplicates.Duplicate);
Console.WriteLine(EDuplicates.Keys);
Console.WriteLine(EDuplicates.Compilation);
Run Code Online (Sandbox Code Playgroud)
会打印
Duplicate
Duplicate
Keys
Keys
Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
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属性会有所不同?
在.NET你可以有多个enum对同一整数值?
例如.
public enum PersonGender
{
Unknown = 0,
Male = 1,
Female = 2,
Intersex = 3,
Indeterminate = 3,
NonStated = 9,
InadequatelyDescribed = 9
}
Run Code Online (Sandbox Code Playgroud) I just noticed that you can create something like this in C#:
enum TestEnum
{
First = 1,
Second = 1,
Third = 2
}
[TestMethod]
public void Test()
{
TestEnum test = TestEnum.First;
var en = (TestEnum) 1;//And en is now set to First
}
Run Code Online (Sandbox Code Playgroud)
We would like the enums value to be unique. Right now, I have written a unit test that checks that each value is only used once in our enum. Is there a better way …
假设我有一个enum BasicType,其定义如下:
public enum ObjectType{
A = 1,
B = 2,
C = 3,
}
Run Code Online (Sandbox Code Playgroud)
BasicType 标识执行任何 的三元分类Object。随后,我意识到对象A和B需要以与C类似的方式处理,因此我定义了另一个enum ObjectGroupType如下:
public enum ObjectGroupType
{
AB = 1,
C = 2,
}
Run Code Online (Sandbox Code Playgroud)
使用新的枚举,我可以将几种已知类型的对象归为一个。因此,当我收到各种类型的对象流时,我实际上会识别它们是属于 AB 类型还是 C 类型。有没有优雅的解决方法?例如,我能否为 A 和 B 中的 A 和 B 分配相同的枚举值ObjectGroupType?:
编辑1:我无法找到相似的问题在这里
编辑 2:感谢 Maurice 的建设性意见——从你的回答中得到提示,我想出了这个重新定义的ObjectGroupType.
public enum ObjectGroupType
{
AB = ObjectType.A | ObjectType.B
C = 2,
} …Run Code Online (Sandbox Code Playgroud)