如果做法不好,C#空白还能逃脱吗?

Bla*_*lam 2 c# indentation

我的意思是,如果我想要if语句有一个else,那么这是不好的做法,但是有一个嵌套的if语句"以我的方式"所以我使用了一个空白的else语句,例如"else;" 或"别的{}"逃脱它?

例如:

if (lsvAddons.SelectedItems.Count > 0)
    foreach (ListViewItem A in lsvAddons.SelectedItems)
        if (Addons[A.Index] != null) Addons[A.Index].DoHelp();
        else { }
else Console.WriteLine(_GenericHelpString);
Run Code Online (Sandbox Code Playgroud)

VS:

if (lsvAddons.SelectedItems.Count > 0)
{
    foreach (ListViewItem A in lsvAddons.SelectedItems)
        if (Addons[A.Index] != null) Addons[A.Index].DoHelp();
}
else Console.WriteLine(_GenericHelpString);
Run Code Online (Sandbox Code Playgroud)

甚至:

if (lsvAddons.SelectedItems.Count > 0)
{
    foreach (ListViewItem A in lsvAddons.SelectedItems)
    {
        if (Addons[A.Index] != null) 
        { 
            Addons[A.Index].DoHelp();
        }
    }
}
else
{
    Console.WriteLine(_GenericHelpString)
}
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 23

大括号是你的朋友.

如果你抵制忽略大括号的冲动,你就会领先于曲线.第三种形式是完全明确的,更易于阅读,并将帮助您避免意外的错误.我不了解你,但我可以马上理解第三种形式的行为..前两种形式需要更多的思考和心理解析才能正确.

许多开发人员试图摆脱大括号并使用隐式形式的if语句.不幸的是,当你遇到类似的事情时你会怎么做:

if( someCondition... )
    DoSomething();
    DoAnotherThing();
Run Code Online (Sandbox Code Playgroud)

开发人员是否只是缩进不正确?或者是否意图让两种方法成为相同条件的一部分?事后很难说出来......并且是缺陷的主要来源.这是一个更糟糕的例子:

if( someCondition );
    DoSomething();
    DoAnotherThing();
Run Code Online (Sandbox Code Playgroud)

你注意到这里的微妙错误吗?

如果你使你的代码毫不含糊,并且对这些问题不那么谨慎,那么从长远来看你会好得多.

开发人员通常会争论省略大括号,以便他们的代码更短,更容易理解.现在,避免使用长方法肯定是有好处的(有些人甚至认为方法应该总是长一屏)......但我不认为这种简洁引入的风险通常值得奖励.请记住,有一些方法可以重新构建方法以避免过度嵌套 - 并且它们通常会比省略大括号更能提高您的可读性.

我个人的口头禅是:

  1. 说得对.
  2. 讲清楚.
  3. 简明扼要.
  4. 快点......按顺序.

  • @Blam:这是一回事.不要省略大括号.我看到很多缺陷是由于开发人员误解了预期的范围或内容的凝聚力.相信我......从长远来看,这些额外的两个角色将为您省去麻烦. (3认同)

Lar*_*nal 9

空代码块是不好的做法.

else { }
Run Code Online (Sandbox Code Playgroud)


Roh*_*rbs 7

使用第三种格式.

if (lsvAddons.SelectedItems.Count > 0)
{
    foreach (ListViewItem A in lsvAddons.SelectedItems)
    {
        if (Addons[A.Index] != null) 
        { 
            Addons[A.Index].DoHelp();
        }
    }
}
else
{
    Console.WriteLine(_GenericHelpString)
}
Run Code Online (Sandbox Code Playgroud)


Fio*_*ite 7

如果你问哪个更好,更干净的代码,那么最后一个!

我不知道为什么开发人员如此努力地将他们的代码压缩成越来越令人困惑的形式.额外的括号可能无法告诉编译器有什么不同,但这只是良好编码的一半.使其清晰易读,您的同事和软件用户将感谢您减少错误!


JDT*_*JDT 7

空的else是否会使您的代码更具可读性?不,但是大括号呢.