C# 什么更具可读性?

C# 什么更具可读性?,c#,linq,lambda,readability,C#,Linq,Lambda,Readability,我有这两段代码,哪一段更可读 弗雷奇 decimal technicalPremium = 0; foreach (Risk risk in risks) { technicalPremium = technicalPremium + risk.TechnicalPremium; } return technicalPremium; 林克 return risks.Sum(risk => risk.TechnicalPremium); 如果处理代码的团队知道Linq版本的

我有这两段代码,哪一段更可读

  • 弗雷奇

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  • 林克

    return risks.Sum(risk => risk.TechnicalPremium);
    

  • 如果处理代码的团队知道Linq版本的功能和内部工作原理,那么它的可读性就更高。

    我认为第二个选项更好,因为它应该更高效。然而,现在发生的事情并不那么明显(至少对我来说)。

    对于能够阅读LINQ的人来说,LINQ就是一个


    对于那些必须一步一步地解释代码的人(通过使用intellisense/documentation,可以使用较短的一个。

    LINQ代码既可读性强,又能自我记录。

    两者都不是。第一个代码更详细,并且可能被每个人都理解。第二个代码更简洁,每个人都很容易理解,即使对LINQ略知一二


    我会说你可以根据你所处的环境做出选择。

    使用linq。如果你认为需要解释,一行注释就可以了。随着人们越来越习惯linq,对注释的需求就会消失。

    我会说第一行,因为我不了解linq。冒着过度记录的风险,我会使用带有简短des的注释描述正在发生的事情。或者只是说这是linq,供可能不知道的人使用。

    第一个选项对更广泛的人来说更具可读性。第二个选项有一个“进入障碍”,读者可能会或可能会知道和理解linq。它更简洁,因此,如果你的观众超过了这个进入障碍,可能会更好.

    如果您提供一条注释解释它的用途,那么我会选择Linq选项。

    如果您不了解Linq,第一个选项。任何开发人员都可以阅读和理解第一个选项。

    这里没有可读性问题。单击Sum并点击F1


    Linq是赢家。

    每种语言都有编写此类代码的最佳方式的约定,因此,对于经常使用该语言的人来说,最具可读性的不是通用的。对于Java或普通C#程序员来说,第一种选择更具可读性。对于习惯Linq或函数式编程的人来说,第二种更具可读性。

    使用whichever您喜欢,但将其隐藏在一个方法中:

    return risks.SumTechnicalPremium();
    
    我不知道c#但第二种选择对我来说更干净,我可以理解它的作用(好的,与第一种版本进行一些猜测和交叉检查)。可能是因为一些功能背景。但在第一种选择中,你必须在4(!)中查找technicalPremium位置。如果您只是在阅读代码,那么第二个要短得多,也更容易理解。

    十进制技术参数=0

    foreach(风险中的风险)technicalPremium=technicalPremium+Risk.technicalPremium


    return technicalPremium;

    我看到人们说他们喜欢第一个“如果你不懂Linq”。是的,如果你不懂C#,第一个是不可读的。这不是“哪一个更可读”的问题,而是“我们喜欢使用哪种语言功能?”

    首先,与您的团队就每个人都不喜欢的语言/框架/工具集的部分进行对话,并宣布它们是禁止使用的。其他所有内容都被视为标准词汇表的一部分,每个人都应该流利。此列表应该放在您的编码标准文档中,就在“”和“”旁边


    只要Linq不在您的“排除”列表中,第二个示例就比第一个示例可读性好得多。为什么?因为它声明了代码的意图,而不仅仅是为读者提供破译的机制。

    如果您的目标是使它对可能在您之后出现的“任何人”更具可读性,那么就使用foreach。我解释“更具可读性"意思是说,任何对该语言的基础知识有经验的人都应该能够掌握。对于不熟悉linq并仍在使用VS2005或更早版本的人来说,linq语法将令人困惑。

    我想说,第一段代码肯定更具可读性,如果您至少重命名变量risk以便hat它的名称与类不同。如果您重命名数组风险,可能也会更好。

    我同意有人说,随着Linq越来越广泛地被采用,第二个将很容易理解。它当然更简洁


    然而,我对调试的易用性有些担心。在foreach中一步一步地检查代码似乎要容易得多,以便准确地看到它在每个过程中都在做什么。

    我认为这取决于您所说的“可读性”是什么意思.第一个示例清楚地说明了程序逻辑,任何具有编程背景的人都应该能够理解

    对我来说,第二个示例基于上下文更直观(即,您正在获取一个数组(或其他一些集合类型),并在该数组的每个元素上执行一个名为Sum的方法)。第二个示例唯一不太清楚的地方是实际的lambda表达式本身,特别是对于没有lambdas或alraedy经验、有函数编程背景的人


    我认为随着lambda在.NET编程中越来越流行,这将不再是一个问题。就目前情况而言,我认为在理解如何在.NET中使用lambda表达式的基础知识方面有一个非常小的学习曲线。

    第二个肯定是。有这么大的代码块来做像求和这样简单的事情是不可能的必要的。我也不知道LINQ是什么,但它对我来说是完全可读的。

    实际上,LINQ通常会增加开销-但是,它将是如此微不足道(特别是在这种情况下)这几乎无关紧要。在这种情况下,它会为每个项添加一个委托调用和一些堆栈跃点。我不会失去任何睡眠-#2对我来说;-pNo需要点击F1。将鼠标悬停在Sum上,你会得到一个描述函数的工具提示;)谁使用鼠标?哦,我说单击…我想你抓住我了,哈哈。如果你的“普通C#程序员”不明白Linq,他有个问题,