C# 为什么必须将枚举参数重铸为其声明的类型?
我将一个枚举定义为短,但是当将其中一个元素作为参数传递时,计算机拒绝接受该枚举已经是短的,并让我重铸它。我的问题是为什么 i、 e.枚举设置:短{val1,val2,val3}C# 为什么必须将枚举参数重铸为其声明的类型?,c#,casting,enums,C#,Casting,Enums,我将一个枚举定义为短,但是当将其中一个元素作为参数传递时,计算机拒绝接受该枚举已经是短的,并让我重铸它。我的问题是为什么 i、 e.枚举设置:短{val1,val2,val3} public void function (short param) { // ... } function(settings.val1); // will not compile function((short)settings.val1); // will parse. 因为settings.val1
public void function (short param)
{
// ...
}
function(settings.val1); // will not compile
function((short)settings.val1); // will parse.
因为settings.val1是settings类型而不是short,并且不支持隐式强制转换。Enum:short只是说它的字段存储在短类型内存区域中。枚举项的默认类型为Int32,因为settings.val1是settings类型而不是short,并且不支持隐式强制转换。Enum:short只是说它的字段存储在短类型内存区域中。枚举项的默认类型为Int32您有一个名为
设置
的枚举类型。该枚举的支持类型恰好是short
,但就编译器而言,该类型仍然是settings
由于
settings
没有隐式转换为short
,因此需要显式转换。您有一个名为settings
的枚举类型。该枚举的支持类型恰好是short
,但就编译器而言,该类型仍然是settings
由于
settings
没有隐式转换为short
,因此需要显式转换。将方法调用修改为public void function(settings param){}
在此上下文中,将方法调用修改为public void function(settings param){},:
不是继承运算符。相反,它只定义支持数据类型。不幸的是,它看起来像继承。在此上下文中,:
不是继承运算符。相反,它只定义支持数据类型。不幸的是,它看起来像是继承。可能重复的可能重复的可能重复的感谢菲利普和所有回答这个问题的人。这让我更好地理解了enum作为“伪”类型的工作原理。感谢Philip和所有回答这个问题的人。这让我更好地理解了enum作为“伪”类型的工作原理。