相关疑难解决方法(0)

枚举0值不一致

示例代码:

    public enum Foods
    {
        Burger,
        Pizza,
        Cake
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Eat(0);   // A
        Eat((Foods)0);  // B
        //Eat(1);  // C : won't compile : cannot convert from 'int' to 'Foods'
        Eat((Foods)1);  // D    
    }

    private void Eat(Foods food)
    {
        MessageBox.Show("eating : " + food);
    }
Run Code Online (Sandbox Code Playgroud)

C行的代码无法编译,但A行编译正常.有一个0值的枚举是否有特殊处理在这样的情况下得到特殊处理?

c# c#-4.0

10
推荐指数
1
解决办法
208
查看次数

为什么C#3允许将文字零(0)隐式转换为任何枚举?

C#3(Visual Studio 2008)引入了对语言的重大更改(http://msdn.microsoft.com/en-us/library/cc713578.aspx,请参阅更改12),允许将任何文字零隐式转换为一个枚举.这在很多方面都很奇怪.有谁知道为什么这是规范的一部分?为什么不是文字?还是七个?为什么零特殊?并且它使一些非常违反直觉的重载决策选择.例如.

function string F(object o) { return o.ToString(); }
function string F(DbType t) { return t.ToString(); }
int i = 0;
F((long)0) == "String" // would have been "0" in VS 2005
F(0) == "String"
F(i) == "0"
Run Code Online (Sandbox Code Playgroud)

非常混乱,故意引入了对语言的重大改变.有任何想法吗?

c# c#-3.0

9
推荐指数
1
解决办法
723
查看次数

标签 统计

c# ×2

c#-3.0 ×1

c#-4.0 ×1