C# 为什么必须将枚举参数重铸为其声明的类型?

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

我将一个枚举定义为短,但是当将其中一个元素作为参数传递时,计算机拒绝接受该枚举已经是短的,并让我重铸它。我的问题是为什么

i、 e.枚举设置:短{val1,val2,val3}

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作为“伪”类型的工作原理。