c# - 最佳实践 : Returning from method in case block of switch statement?

标签 c# .net

哪种从 switch 语句返回 bool 值的方法更可取?我知道这可能是主观的,但我认为获得有关最佳实践的意见对我们的职业很重要 :)。

public bool foo(param)
{
    switch (param)
    {
        case 1:
            if (something)
            {
                return true;
            }

            return false;    
        default:
            return false;
     }
}

- 或 -

public bool foo(param)
{
    bool flag = false;

    switch (param)
    {
        case 1:
            if (something)
            {
                flag = true;
            }
            break;
        default:
            break;
     }

    return flag;
}

最佳答案

这里的区别是单点返回和多点返回。

一般来说,单点返回代码往往会做大量的簿记工作(临时变量,在循环中检查这些变量),并且随着逻辑变得更加复杂而变得棘手。我看到过大量使用 while (flag) ... flag = false; 模式而不是 while (true) ... break; 模式,读起来一点也不有趣。

我更喜欢多个返回点,因为它们会尽早返回(无需完成额外工作)并且不需要任何本地人帮助跟踪当前返回值。此外,我发现它们并不比单点返回代码更难阅读。

在 c2 ( SingleFunctionExitPoint ) 上对此有很好的讨论。

我发现让方法尽可能保持“功能性”是一件好事(我在这里说“功能性”是因为我通常使用 C#,在 LINQ 之外,它不被认为是功能性的)。通过“功能性”,我的意思是我尽量避免改变状态。以局部变量或成员的形式引入更多状态会使事情变得更难理解,因为您现在必须考虑它们的值,并且必须考虑如何设置这些变量(从另一个方法,另一个类,...) .

总的来说,国家是邪恶的,但有时它是必要的邪恶。

这个特定问题有一些有趣的对话 here on SO

关于c# - 最佳实践 : Returning from method in case block of switch statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3588181/

相关文章:

c# - BindingSource.Position 无效

.net - 当调用者不在域中时请求用户在 AD 中的角色

c# - 用枚举键替代字典?

c# - 如何使启动画面显示更长时间

c# - WPF Magellan ViewModel IOC

c# - 如何使用 C# 从 android 相机获取图像或位图

c# - 多层架构和身份。为什么要使用UserManager和RoleManager?

c# - 是否可以通过编程方式检查 selenium Remote Webdriver Server 是否正在运行

javascript - Google Analytics Embed API 服务器端授权不使用 C# 呈现图表

c# - 默认事件添加/删除实现