C#枚举值不强制执行

C#枚举值不强制执行,c#,enums,C#,Enums,在C#中,使用枚举 public enum ShoppingCartType { ShoppingCart = 1, Wishlist = 2, } public class foo { public void bar(int parameter1,ShoppingCartType type) { //do something } } 下面的代码以和平方式编译和运行 foo.bar(param1,(ShoppingCartType)30

在C#中,使用枚举

public enum ShoppingCartType
{
    ShoppingCart = 1,
    Wishlist = 2,
}

public class foo
{
    public void bar(int parameter1,ShoppingCartType type)
    {
        //do something
    }
}
下面的代码以和平方式编译和运行

foo.bar(param1,(ShoppingCartType)30);
如果没有强制转换,以下代码甚至无法编译

foo.bar(param1,30);
为什么它有意义? 结果基本相同

Reed Copsey的回答解释了为什么第一个有效,以及为什么它会这样

但我看不到第一个和第二个代码片段之间的真正区别,尤其是第二个代码片段似乎更直观,并暗示了这种行为

是否有方法更改此行为(在运行时之前)


(我不是在寻找一种在运行时强制执行枚举的方法)。

我假设这是一种方法,其第二个参数采用
ShoppingCartType
。编辑,希望现在已经清楚:)仅供参考-第一个副本解释了如何避免问题;第二个解释了为什么首先允许它发生。