如何解决我想从枚举C#中获取具有特定值的第一个元素
这是我的枚举:
public enum Colors
{
Dark Green = 0,Light Green = 0,Red = 1,Orange = 1,Yellow = 1,Blue = 2,Light Blue = 2,Black = 2
}
我的值为1,并希望使用该值为[红色]的 first 元素。 我尝试过:
Colors c = (Colors)(Enum.GetValues(typeof(Colors))).GetValue(1);
或者这个:
Colors c = (Colors)1;
但是两者都返回中间值-橙色。 有没有办法获得第一个要素? 感谢回应。
解决方法
如果您实际上需要不同的颜色才能映射到同一整数,则建议您使用不同的数据结构,该数据结构可以像字典一样进行映射。
enum Colors { DarkGreen,LightGreen,Red,Orange,Yellow,Blue,LightBlue,Black };
var lookup = new Dictionary<Colors,int>
{
{ DarkGreen,0 },{ LightGreen,{ Red,1 },{ Orange,1 }
///etc
};
现在,您的颜色是真正独特的,然后可以查找给定值的第一个元素:
lookup.FirstOrDefault(x => x.Value == lookupValue);
但是只要需要整数值,就可以查找它:
var colorIndex = lookup[Colors.Red];
,
拥有多个具有相同值的枚举成员(通常有一些特定的例外)是个坏主意。你为什么不做
public enum Colors
{
Dark Green = 1,Light Green = 2,Red = 3,Orange = 4,Yellow = 5,Blue = 6,Light Blue = 7,Black = 8
}
?
,但是两者都返回中间值-橙色”
要澄清一下:在您的枚举中,红色,黄色和橙色是完全相同的; .NET中的枚举仅仅是整数-名称部分仅在以下情况下适用:
- 编写代码
- 在运行时将字符串解析为枚举值时
- 在运行时将枚举值格式化为字符串时
成员(包括枚举定义)的 order 在.NET中未明确定义,因此我们都有一堆整数/名称对-但是从概念上讲,一旦有了枚举,它就是只是整数,且1为1等于1,无论您最初想到的是红色,黄色还是橙色。在枚举重叠时执行字符串解析/格式操作时,将使用以下术语:同样,这在很大程度上是未定义的,但是只要您承认这是可以更改的,就可以通过反复试验弄清楚没有警告。
最后,不要这样做。为每个枚举成员使用不同值,或在此处使用不同的隐喻表达您的意图。也许您真正想要的是以下内容:
public enum Colors
{
[SomeMarker(0)]
DarkGreen,// = 0 implicitly
[SomeMarker(0)]
LightGreen,// = 1 implicitly
[SomeMarker(1)]
Red,// = 2 implicitly
[SomeMarker(1)]
Orange,// = 3 implicitly
[SomeMarker(1)]
Yellow,// = 4 implicitly
[SomeMarker(2)]
Blue,// = 5 implicitly
[SomeMarker(2)]
LightBlue,// = 6 implicitly
[SomeMarker(2)]
Black,// = 7 implicitly
}
从枚举中查找自定义属性值是完全可能的。因此,您只需定义您的SomeMarkerAttribute : Attribute
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。