C# 关于从嵌套语句返回的快速问题

C# 关于从嵌套语句返回的快速问题,c#,coding-style,function-exit,nested-statement,C#,Coding Style,Function Exit,Nested Statement,如果我有一个循环或一组If/else语句,并且我想从嵌套中返回一个值(见下文),那么将值赋给字段或属性并返回该值是最好的方法吗 见下文: bool b; public bool ifelse(int i) { if(i == 5) { b = true; } else { b = false; } return b; } 那怎么办 return i == 5; 那怎么办 return i == 5; 关于这个问题有多种观点。我想大多数人(包括我)倾向于在你有了答案并且没有更多工作要做的

如果我有一个循环或一组If/else语句,并且我想从嵌套中返回一个值(见下文),那么将值赋给字段或属性并返回该值是最好的方法吗

见下文:

bool b;

public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}

else
{
b = false;
}
return b;
}
那怎么办

return i == 5;
那怎么办

return i == 5;

关于这个问题有多种观点。我想大多数人(包括我)倾向于在你有了答案并且没有更多工作要做的时候就回来。有些人会争辩说,您应该只在方法的最后一个语句返回。然而,在某些情况下,它实际上会使事情变得更加复杂

按照我的建议,您的示例将更短、更简单:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

关于这个问题有多种观点。我想大多数人(包括我)倾向于在你有了答案并且没有更多工作要做的时候就回来。有些人会争辩说,您应该只在方法的最后一个语句返回。然而,在某些情况下,它实际上会使事情变得更加复杂

按照我的建议,您的示例将更短、更简单:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

我想说的是,如果你通常只在两个地方从一个方法返回-接近开始(如在守卫条件下)和接近结束;如果方法有任何长度,您应该使用您提到的临时变量,否则阅读代码的人可能很难跟上它。

我想说的是,如果您通常只在两个位置从方法返回-接近开始(如在保护条件下)和接近结束;如果方法有任何长度,您应该使用您提到的临时变量,否则阅读代码的人可能很难遵循它。

如果b仅用于计算方法的返回值,则应将其设置为局部变量(在方法中定义)


正如其他人所建议的,如果您的方法很简单,我将避免使用临时变量,并在知道结果后立即返回。一般规则是使用使代码易于阅读的任何方法。

如果b仅用于计算方法的返回值,则应将其设置为局部变量(在方法中定义)


正如其他人所建议的,如果您的方法很简单,我将避免使用临时变量,并在知道结果后立即返回。一般规则是使用使代码更容易阅读的任何方法。

是的,这是一种好的风格

另一种选择(可能是坏的)是:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}
多个返回点被视为不良风格的原因是,特别是对于较大的方法,很难跟踪方法中的程序流,因为它可能在任何点退出。这可能是调试的噩梦。但是,如果您有一个指定的返回变量,那么您可以观察该变量并确切地知道它将在何时(从单个位置)返回


情况并非总是如此,因为编程中的每一个风格点都有好的一面和坏的一面。

是的,这就是好的风格

另一种选择(可能是坏的)是:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}
多个返回点被视为不良风格的原因是,特别是对于较大的方法,很难跟踪方法中的程序流,因为它可能在任何点退出。这可能是调试的噩梦。但是,如果您有一个指定的返回变量,那么您可以观察该变量并确切地知道它将在何时(从单个位置)返回


并非总是如此,因为编程中的每一个风格点都有好的一面和坏的一面。

正如所指出的,有多个返回语句的缺点是很难找到它们。在某些情况下,转义到返回语句所需的附加逻辑比样式所解决的问题更糟糕


我知道的关于重复返回的主要问题是,您可能很快忘记在新的返回点执行一些清理处理或类似操作。IMHO这对于单返回表单来说也是一个问题,因为转义路径必须记住包含该代码而不包含其他代码。解决这一问题的一个方法是finally块,它可以用c#等语言实现,或者说是更简洁的形式。(好的,我现在就把我的肥皂盒拿出来)

正如所指出的,有多个return语句的缺点是很难找到它们。在某些情况下,转义到返回语句所需的附加逻辑比样式所解决的问题更糟糕


我知道的关于重复返回的主要问题是,您可能很快忘记在新的返回点执行一些清理处理或类似操作。IMHO这对于单返回表单来说也是一个问题,因为转义路径必须记住包含该代码而不包含其他代码。解决这一问题的一个方法是finally块,它可以用c#等语言实现,或者说是更简洁的形式。(好的,我现在就从我的肥皂盒里拿出来)

我想这并不能说明他试图提出的“编程风格”问题,但是+1是最优化的答案。最优化的答案应该是“返回真”;因为OP使用了经典的“if(I=5)”和“if(I=5)”(修正)我确实注意到:)我想因为没有指定语言,所以我不会挂断它!这就是我没有评论的原因,我只是修正了它。我认为这不会说明他试图提出的“编程风格”问题,而是+1表示最优化的答案。最优化的答案应该是“返回真”;因为OP使用了经典的“if(I=5)”与“if(I=5)”(修正)我确实注意到:)我想因为没有指定语言,所以我不会挂断它!这就是为什么我没有评论,我只是修复了它。有很长的方法