C# 此开关语句的编译时错误

C# 此开关语句的编译时错误,c#,C#,我得到一个编译时错误 'UserQuery.ReturnInt(UserQuery.Foo)':并非所有代码路径都返回值 除非我在代码中没有看到什么,否则switch语句应该返回0作为默认值,这样所有代码路径都会返回一个值 enum Foo { Bar, Zoo, Boo } void Main() { Foo test = Foo.Bar; Console.WriteLine (ReturnInt(test)); } int ReturnInt(F

我得到一个编译时错误

'UserQuery.ReturnInt(UserQuery.Foo)':并非所有代码路径都返回值

除非我在代码中没有看到什么,否则switch语句应该返回0作为默认值,这样所有代码路径都会返回一个值

enum Foo
{
    Bar,
    Zoo,
    Boo
}

void Main()
{
    Foo test = Foo.Bar;

    Console.WriteLine (ReturnInt(test));
}

int ReturnInt(Foo test) {

    int someOtherValue = 4; // <---Value may change depending on X

    switch (test)
    {
        case Foo.Bar:
            if (someOtherValue > 20)
                return 1;
            break;

        case Foo.Zoo:
            if (someOtherValue == 5)
                return 4;
            break;

        case Foo.Boo:
            if (someOtherValue == 2)
                return 7;
            break;

        default:
            return 0;
    }
}
enum Foo
{
酒吧,
动物园,
喝倒采
}
void Main()
{
Foo测试=Foo.Bar;
Console.WriteLine(ReturnInt(test));
}
int ReturnInt(Foo测试){
int someOtherValue=4;//20)
返回1;
打破
case Foo.动物园:
if(someOtherValue==5)
返回4;
打破
案例Foo.Boo:
if(someOtherValue==2)
返回7;
打破
违约:
返回0;
}
}

根据“someOtherValue”的值,任何其他开关块都将只点击“break”语句。开关后没有返回语句,因此任何“break”被点击的情况都不会返回值。

在end方法中需要返回语句。我猜您希望它返回0。
enum Foo
{
    Bar,
    Zoo,
    Boo
}

void Main()
{
    Foo test = Foo.Bar;

    Console.WriteLine (ReturnInt(test));
}

int ReturnInt(Foo test) {

    int someOtherValue = 4; // <---Value may change depending on X

    switch (test)
    {
        case Foo.Bar:
            if (someOtherValue > 20)
                return 1;
            break;

        case Foo.Zoo:
            if (someOtherValue == 5)
                return 4;
            break;

        case Foo.Boo:
            if (someOtherValue == 2)
                return 7;
            break;

        default:
            return 0;
    }
}
您已经在switch语句中设置了一些条件,以防止它在每个语句中命中return语句

case Foo.Bar:
            if (someOtherValue > 20)
                return 1;
            break;

在这句话中,
test
等于
Foo.Bar
someOtherValue我会更改它,这样就只有一个返回点,出于清晰的原因,我喜欢它。:-)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间HelloWorld
{
班级计划
{
静态int ReturnInt(Foo测试)
{
int retVal=0;//默认值为0
int someOtherValue=4;//20)
retVal=1;
打破
case Foo.动物园:
if(someOtherValue==5)
retVal=4;
打破
案例Foo.Boo:
if(someOtherValue==2)
retVal=7;
打破
违约:
retVal=0;
打破
}
返回返回;
}
enum Foo
{
酒吧,
动物园,
喝倒采
}
静态void Main(字符串[]参数)
{
Foo测试=Foo.Bar;
控制台写入线(返回输入(测试));
}
}
}
2件事:

1) 代码方面,如果执行任何break语句,则将退出switch语句,并且不会返回任何值


2) 从概念上讲,您说
switch
语句应该返回默认值0,这是真的,但是您正在打开的变量是
test
switch
语句将为未列出的任何值
test
返回0,例如
Foo.Park
Foo.Library
。如果
switch
语句与列出的任何值匹配,例如
Foo.Bar
,则仅执行该块中的代码。然后将退出
开关
语句。

很好!真不敢相信我错过了。