gpt4 book ai didi

c# - 如何从标志枚举值中仅获取第一个值并按照它们添加的顺序获取它

转载 作者:行者123 更新时间:2023-12-03 07:11:21 25 4
gpt4 key购买 nike

我有以下代码:

[Flags()]
public enum Foo
{
Unknown = 0x00,
A = 0x01,
B = 0x02,
C = 0x04,
D = 0x08,
}

public static class Extensions
{
public static List<Foo> AsList(this Foo types)
{
List<Foo> list = new List<Foo>();
foreach(Foo sT in Enum.GetValues(typeof(Foo)))
{
if ((sT & types) == sT) list.Add(sT);
}
return list;
}

}

class Program
{
static void Main(string[] args)
{
Foo foo1 = Foo.A | Foo.B | Foo.C;
Foo foo2 = Foo.C | Foo.B;

Foo firstInfoo1 = foo1.AsList()[0];
Foo firstInFoo2 = foo2.AsList()[0];
}
}

现在 firstInfoo1firstInfoo2 都变成了 Unknown,这是我不想要的。看到那里的代码我应该总是返回索引 [1],如下所示: foo1.AsList()[1]

这是个好主意吗?关于错误的任何想法,需要进行边界检查。

另外让我们看看 foo2,我首先添加了 Foo.C,然后添加了 Foo.B。有什么方法可以从 AsList Foo.C 而不是 Foo.B 获取,即按添加顺序排列的第一个。

这可能吗?

感谢您的帮助。

谢谢

最佳答案

删除“未知”值,或执行以下操作:

if ((int)sT != 0 && (sT & types) == sT) list.Add(sT);

一点背景知识:这些 OR 运算的枚举并不像内存中那样存储,它们存储为简单的整数,因此 .NET 不知道该枚举是如何构造的。

关于c# - 如何从标志枚举值中仅获取第一个值并按照它们添加的顺序获取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20267606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com