为简洁起见,将多行C#代码组合在一起或为了​​清晰起见而分开

时间:2014-05-15 21:16:30

标签: c#

我对c#很新,并试图学习最佳实践。在过去的一周里,我需要在更长+更简单的代码之间做出选择,或者将多个动作组合成单个语句的更短代码。在尝试编写清晰,简洁的代码时,您是老编程员使用的标准是什么?以下是代码I的示例,其中包含两个选项。哪个更好?

A)

        if (ncPointType.StartsWith("A"))//analog points
        {
            string[] precisionString = Regex.Split(unitsParam.Last(), ", ");
            precision = int.Parse(precisionString[1]);
        }
        else
            precision = null;

B)

        if (ncPointType.StartsWith("A"))//analog points
            precision = int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]);
        else
            precision = null;

7 个答案:

答案 0 :(得分:3)

没有对错。这是基于意见的。

但是,请记住,无论是添加大括号,添加注释,添加空格还是其他内容,它都不会影响最终程序集的性能或大小,因为编译器可以很好地优化它。那么,为什么不采用更冗长的方式让其他程序员更容易理解呢?

答案 1 :(得分:0)

这基本上取决于您选择的编码标准。没有对错,只有个人偏好。

以团队形式同意您的偏好。

答案 2 :(得分:0)

调试选项A更容易,但选项B更简洁,同时仍然可读。您可以使用三元运算符使其更简洁:

precision = ncPointType.StartsWith("A") ? int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]) : null;

虽然这种方式更具可读性(并且仍以同样的方式工作!):<​​/ p>

precision = ncPointType.StartsWith("A") ? 
                int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]) : 
                null;

最好坚持使用项目中使用的标准。对于 可维护性 而言, 可读性 比拥有更少的代码行更为重要。在这两个选项中, 效率 是相同的,因此在这种情况下您不必担心速度。

答案 3 :(得分:0)

但更好的是:

precision = ncPointType.StartsWith("A")? 
                 int.Parse(Regex.Split(unitsParam.Last(), ", ")):
                 null;

这表示执行beiong函数(设置精度),  以及控制如何设置的条件,甚至更少的代码,    - 不创建不必要的临时变量来保存其他地方没有使用的临时结果。

答案 4 :(得分:0)

如果你问我A和B都是不好的做法。你应该总是使用大括号,无论它是一行还是多行。这有助于防止将来当人们向if或else块添加额外的代码行并且没有注意到大括号丢失时的错误。

有时使用“更多”代码(如使用临时变量等)会使代码更容易调试,因为您可以将鼠标悬停在符号上。这完全取决于平衡,而这还有经验。请记住,您可能不是唯一一个处理代码的人,所以最清楚。

答案 5 :(得分:0)

归根结底,它取决于你的选择,因为它与性能无关,但我还要注意,如果省略花括号,你就无法实例化或定义变量:

int a = 0;
if (a == 0)
    int b = 3;

无效,而:

int a = 0;
if (a == 0)
{
    int b = 3;
}

有效。

答案 6 :(得分:0)

正如其他所有人都指出的那样,本身没有硬性和快速的“规则”,但两个代码块之间可能存在大括号; A和B都具有与Apple goto bug类似的特征,因为引入了潜在的歧义。

考虑:

void Main()
{
    int x=1;
    if (x==1)
        Console.WriteLine("1");
    else if (x==2)
        Console.WriteLine("NOT 1");
        Console.WriteLine("OK");
}

将产生

1
OK

对于扫描代码的人,特别是如果它被其他无害的代码包围,这很容易被误读为“只打印”OK“如果x==2。”显然有些人会发现它,有些人会赢得'但是,为什么要引入一个大括号的危险:)