相关疑难解决方法(0)

如果Enum值相同,我将获得哪个枚举常量

如果存在多个具有相同值的枚举常量,是否存在一个常数我得到的逻辑?

我尝试了下面的变化,但无法得到合理的逻辑.

主要方法:

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)

.net c# enums

58
推荐指数
2
解决办法
2458
查看次数

C#如何确定哪个枚举值为返回值?有规矩吗?

我找到了一个很有趣的东西 - 让我们说:

 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",为什么?

.net c# enums

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

如何防止枚举中的重复值?

我想知道有没有办法防止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)

.net c# enums

14
推荐指数
3
解决办法
5568
查看次数

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
查看次数

你有同一个整数的多个枚举值吗?

.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)

.net c# clr enums

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

C# enums - Possible to have double ids

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 …

.net c# enums unique

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

C#中枚举成员的联合

假设我有一个enum BasicType,其定义如下:

    public enum ObjectType{
        A = 1,
        B = 2,
        C = 3,
    }
Run Code Online (Sandbox Code Playgroud)

BasicType 标识执行任何 的三元分类Object。随后,我意识到对象AB需要以与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)

c# enums grouping

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

标签 统计

c# ×7

enums ×6

.net ×5

clr ×1

grouping ×1

unique ×1