c,这是声明两个参数的更好方法

本文关键字:两个 参数 方法 更好 声明 | 更新日期: 2023-09-27 18:24:49

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

例如a:

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
     }
 }

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

c,这是声明两个参数的更好方法

纯粹就维护而言,第一个代码块更好,因为它不会重复代码(假设"Do something"在两种情况下都相同)。

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

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

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

如果获得所需的值,版本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
      }
 }

如果您希望稍后使用这些方法,那么g表示第二个方法。一旦超出范围,这些变量就会丢失。

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

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

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