我有一个枚举,其成员具有相同的值,但当我尝试将它们打印为字符串时,我希望看到它使用第一个定义的值,即Buy
和{{1}它打印Bid
,Buy
和Sell
打印Ask
,但测试显示它们看起来是随机选择的,因为它既不是第一个也不是最后一个值。为什么这种不一致?
Sell
输出:
using System;
public enum OrderType
{
Buy,
Bid = Buy,
Sell,
Ask = Sell
}
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
OrderType o = OrderType.Buy;
Console.WriteLine("{0}: {1}", (int)o, o);
OrderType o2 = OrderType.Bid;
Console.WriteLine("{0}: {1}", (int)o2, o2);
OrderType o3 = OrderType.Sell;
Console.WriteLine("{0}: {1}", (int)o3, o3);
OrderType o4 = OrderType.Ask;
Console.WriteLine("{0}: {1}", (int)o4, o4);
}
}
答案 0 :(得分:5)
而不是不一致,你应该认为这是一个选择任意的情况。
你创建了一个枚举,其中两个枚举值代表整数0,两个值代表整数1.所以当你问"什么枚举值与0相关?"有两种可能的答案。
C#的设计者可以通过以下方式回答这个问题:
语言设计师有时会选择随意的#34;路线,因为它留下了更多的优化空间。例如,他们可以将整数到枚举映射放在哈希表或其他东西中,让查找返回最方便的内容。这允许他们稍后改变他们的映射策略并返回其他东西,而不会破坏相对于规范的行为。
如果他们定义语言以生成对声明顺序敏感的值,则可能会给实现带来一点负担,并且基本上还有一个规则需要跟踪。
我实际上希望答案是"选择任意值"所以我很高兴看到C#符合我的期望。但我们都不同,是的,有些人会感到惊讶。 :)