C#:枚举在上下文中是否适当地将自己转换为字符串或整数

C#:枚举在上下文中是否适当地将自己转换为字符串或整数,c#,enums,casting,C#,Enums,Casting,如果我有枚举: public enum VehicleType { Car = 0, Boat = 1, Bike = 2, Spaceship = 3 } 然后我会: int X = 10; VehicleType vt = (VehicleType)2; X = X + vt; Console.WriteLine("I travel in a " + vt + " with " + X + " people."); C#中的输出应该是什么?枚举的基类型默认

如果我有枚举:

public enum VehicleType
{
    Car = 0,
    Boat = 1,
    Bike = 2,
    Spaceship = 3
}
然后我会:

int X = 10;
VehicleType vt = (VehicleType)2;
X = X + vt;
Console.WriteLine("I travel in a " + vt + " with " + X + " people.");

C#中的输出应该是什么?

枚举的基类型默认为int。如果明确指定,它也可以是字节、sbyte、short、ushort、uint、long或ulong

X=X+vt
将出错,因为它需要显式转换

如果是
X+=(int)vt它将是:

“我和12个人骑自行车旅行。”


因为当使用
Console.WriteLine
时,所有变量的ToString()方法都被调用,因此给出了枚举的字符串表示形式(枚举为2,等于Bike,因此Bike被返回)。

它们被表示为整数。我希望它们可以被表示为对象

In
X=X+vtvt将被强制转换为int。

“我乘坐“+vt+”和“+X+”人一起旅行。”
vt将被替换为vt.ToString(),它将打印枚举的名称。

正如前面提到的其他人一样,您只得到一个整数

这是因为的基类型是整数,但可以通过以下方式将其更改为任何其他值类型:
public enum VehicleType:ushort

为了更好地处理这些名称,该类有一些方便的函数(如,或)



为了回答这个问题,你怎么能说在你刚才所说的内容中,枚举被表示为int呢?从评论中:看一看(特别是看最后一个使用的示例)。

Debug.Print“我乘坐“+vt+”和“+X+”人旅行。”天哪!为什么你们不能租一辆车?我的枚举正在评估适合的字符串。我和12个人骑自行车旅行。@Neale:答案不正确。如果有人要回答这样的问题,如果他们不确定,他们应该通过编译器运行代码。-C#强制显式enum强制转换。您正确地认为X=X+vt不会编译,因为它需要显式转换,但您错误地说enum在默认情况下转换为int,因为enum在连接到字符串时将转换为字符串。很公平-当对enum调用ToString()时,则表示字符串。我已经暗示了这一点,上面说“自行车”是书面的。这不是铸造!Try(string)vt-它将不起作用,因为您无法将枚举强制转换为字符串。在开始对有效答案进行向下投票之前,先了解强制转换是什么。[在X=X+vt中;vt将被强制转换为int]-不,不会。枚举上没有隐式强制转换方法,它们由编译器密封,因此无法实现。需要显式强制转换:X=X+(int)vt;-C#强制显式枚举强制转换。@尼尔:当我在C#编译器中尝试类似的操作时,我得到了这个答案,所以我认为它是正确的。你在编译器中试过这个吗?试着编译你问题中的确切代码-X=X+vt;行不会编译。如果X=X+vt不编译,那么根据其他答案,vt怎么能表示为整数?@Neale:答案不正确。如果有人要回答这样的问题,如果他们不确定,他们应该通过编译器运行代码。这不是不正确的-这是一个正确的语句,后面有一个有效的意见。当它们连接到字符串时,它们不表示为整数,所以答案是不正确的。我明白你的意思,这看起来更像是对你的问题的误解。枚举永远不会将自己强制转换为除其整数类型以外的任何类型。但是,调用ToString()将返回字符串值。@Oliver:这不是正确答案。连接到字符串的枚举不表示为整数,因此此答案不正确。@尼尔:答案不正确。如果有人要回答这样的问题,如果他们不确定,他们应该通过编译器运行代码。那么为什么对所选答案有6票赞成,而对任何其他答案都没有投票?这并不意味着其他答案不正确。事实上,选择的答案是唯一一个是错误的(部分)!好的,关于线需要显式转换的说法似乎是正确的:X=X+vt;但是,这使得所有答案都不正确,包括您的答案,因为枚举将隐式转换为字符串。试试看,那不是演员。使用Console.Writeline将意味着调用枚举的ToString()方法。这确实返回了所述的名称。除所选答案外,所有答案均不正确。