【问题标题】:c# which is the better way to declare two parametersc#这是声明两个参数的更好方法
【发布时间】:2013-07-24 16:14:21
【问题描述】:

关于使用两个变量的最佳方法,我有一个非常简短的问题。本质上,我有一个 enum 和一个 int,我想在几个 if 中得到它的值。我应该在 if 之外还是在内部声明它们 - 考虑以下示例:

例如:

public void test() {
    EnumName? value = null;
    int distance = 0;

     if(anotherValue == something) {
        distance = 10;
        value = getValue(distance);
     }
     else if(anotherValue == somethingElse) {
        distance = 20;
        value = getValue(distance);
     }


    if (value == theValueWeWant){
      //Do something
 }

例如2

public void test() {

     if(anotherValue == something) {
        int distance = 10;
        EnumType value = getValue(distance);
        if (value == theValueWeWant){
           //Do something
     }
     else if(anotherValue == somethingElse) {
        int distance = 20;
        EnumType value = getValue(distance);
        if (value == theValueWeWant){
            //Do something
     }

 }

我只是好奇哪个最好?或者是否有更好的方法?

【问题讨论】:

  • 两者是不同的场景,第一个示例需要 if 语句之外的变量,而第二个示例则不需要 if 语句范围之外的变量

标签: c# optimization coding-style


【解决方案1】:

纯粹就维护而言,第一个代码块更好,因为它不会重复代码(假设“做某事”在两种情况下都是相同的)。

就性能而言,差异应该可以忽略不计。第二种情况确实会在编译的 IL 中生成两倍的本地变量,但 JIT 应该注意到它们的使用不会重叠并优化掉它们。第二种情况也会导致两次发射相同的代码 (if (value == theValueWeWant) { ...),但这也不应该导致任何显着的性能损失。

(虽然第二个示例的两个方面都会导致编译的程序集稍微大一点,但更多的 IL 并不总是意味着性能更差。)

【讨论】:

    【解决方案2】:

    这两个例子做了两个不同的事情:

    如果您获得所需的值,版本 1 将运行相同的代码,而版本 2 可能会运行不同的代码,即使您获得所需的值。

    您可以进行很多可能的(微)优化。

    例如,如果距离仅在 getValue(distance) 中使用,您可以完全摆脱它:

     /*Waring, micro-optimization!*/
     public void test() {
    
          EnumType value = getValue((anotherValue == something) ? 10 : (anotherValue == somethingElse) ? 20 : 0);
          if (value == theValueWeWant){
      //Do something
          }
     }
    

    【讨论】:

      【解决方案3】:

      如果您希望稍后使用它们,则 g 用于第二种方法。一旦超出范围,这些变量就会丢失。

      即使您以后不想使用它们,也应该在 if 之前声明它们,以避免代码重复。

      【讨论】:

        【解决方案4】:

        这个问题纯粹是风格问题,因此没有正确答案,只有意见

        C# 最佳实践通常是在使用变量的范围内声明变量。这将指向第二个示例作为答案。尽管类型和名称相同,但它们代表不同的用途,应限制在创建它们的块中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-09
          • 1970-01-01
          • 2021-06-13
          • 1970-01-01
          • 1970-01-01
          • 2021-05-09
          • 2014-03-24
          • 1970-01-01
          相关资源
          最近更新 更多