一、out输出参数

在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如:

先定义一个方法,方法参数是out类型的输出参数:

private void DoNoting(out int x, out int y)
{
      x = 1;
      y = 2;
}

以前版本的写法:

 // 必须先定义i、j,才能使用out参数
 int i = 0;
 int j = 0;
 this.DoNoting(out i, out j);
 Console.WriteLine($"i+j={i+j}");

 在C#7.0中,可以不用先定义,就能够直接使用了:

this.DoNoting(out int x, out int y);
Console.WriteLine($"x+y={x + y}");
this.DoNoting(out var l, out var m);

二、模式

  /// <summary>
  /// 具有模式的 IS 表达式
  /// </summary>
  /// <param name="o"></param>
  public void PrintStars(object o)
  {
        if (o is null) return;     // 常量模式 "null"
        if (!(o is int i)) return; // 类型模式 定义了一个变量 "int i" i的值就是o的值 相当于is类型判断
        Console.WriteLine($"i={i}");
  }

使用方法:

this.PrintStars(null);
this.PrintStars(3);

除了可以像上面那样使用外,还可以使用下面的方式:

private void Switch(string text)
  {
              int k = 100;
              switch (text)
              {
                  case "Tom" when k > 10:   // text="Tom"且k<10才会输出Tom
                      Console.WriteLine("Tom");
                      break;
                  case "Joe" when text.Length < 10:  //text="Joe"且text的长度<10才会输出Joe
                     Console.WriteLine("Joe");
                     break;
                 case string s when s.Length > 7://模式 定义变量s,s就是text的值
                     Console.WriteLine(s);
                     break;
                 default:
                     Console.WriteLine("default");
                     break;
                 case null:
                     Console.WriteLine("null");
                     break;
             }
 }

 调用:

this.Switch(null);
this.Switch("TomTomKevin");
this.Switch("JoeForest");

三、元组

先来看下面的两个方法:

  /// <summary>
  /// 使用默认参数名称
  /// </summary>
  /// <param name="id"></param>
  /// <returns></returns>
  private (string, string, string) LookupName(long id) // tuple return type
  {
        return ("first", "middle", "last");
  }
 
 /// <summary>
 /// 不使用默认参数名称
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 private (string first, string middle, string last) LookupNameByName(long id) // tuple return type
 {
      return ("first", "middle", "last");
      //return (first: "first", middle: "middle", last: "last");
 }

 调用:

 // 使用默认参数名称:Item1、Item2、Item3
 Console.WriteLine($"使用默认参数名称");
 var result = this.LookupName(1);
 Console.WriteLine(result.Item1);
 Console.WriteLine(result.Item2);
 Console.WriteLine(result.Item3);
 // 不使用默认参数名称
 Console.WriteLine($"不使用默认参数名称");
 var result2 = this.LookupNameByName(1);
 Console.WriteLine(result2.first);
 Console.WriteLine(result2.middle);
 Console.WriteLine(result2.last);
 // 也可以使用默认参数名称
 Console.WriteLine($"也可以使用默认参数名称");
 Console.WriteLine(result2.Item1);
 Console.WriteLine(result2.Item2);
 Console.WriteLine(result2.Item3);

四、数字分割

如果数字太长,可以按照一定的位数用“_”进行分割,例如:

long big = 100_000_0000;
Console.WriteLine($"big={big}");