一、out输出参数

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

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

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

以前版本的写法:

 // 必须先定义i、j,才能使用out参数
int i = ;
int j = ;
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();

结果:

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

 private void Switch(string text)
{
int k = ;
switch (text)
{
case "Tom" when k > : // text="Tom"且k<10才会输出Tom
Console.WriteLine("Tom");
break;
case "Joe" when text.Length < : //text="Joe"且text的长度<10才会输出Joe
Console.WriteLine("Joe");
break;
case string s when s.Length > ://模式 定义变量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();
Console.WriteLine(result.Item1);
Console.WriteLine(result.Item2);
Console.WriteLine(result.Item3);
// 不使用默认参数名称
Console.WriteLine($"不使用默认参数名称");
var result2 = this.LookupNameByName();
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}");

最新文章

  1. CSS DIV自动适应高度
  2. cookie的作用
  3. SqlServer根据时段统计数据
  4. 转载:javascript 拖拽排序,简洁示例备忘
  5. Ubuntu 12.04下虚拟磁带库mhvtl的安装和使用
  6. JAXB - XML Schema Types, Defining Subtypes
  7. 搭建DirectUi开发平台
  8. 如何自定义UIPickerView中文本的大小和文本靠左或靠右显示?
  9. Unity脚本——Csharp
  10. 开源NetWorkSocket通讯组件
  11. 【转】给word中的代码着色
  12. MySQL随记(一)
  13. 删除新版UniAccess Agent 办公室监控软件的方法
  14. Java泛型的PECS原则
  15. 【转载】Docker 经验之谈
  16. actor、reactor与proactor模型:高性能服务器的几种模型概念(转)
  17. 一个简单RPC框架是怎样炼成的(V)——引入传输层
  18. innerText兼容性问题
  19. WPF binding&lt;一&gt; Data Binding在WPF中的地位
  20. AutoLayout对 scrollview的contentSize 和contentOffset属性的影响

热门文章

  1. update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新
  2. java、oracle对CLOB处理
  3. java.lang.SecurityException:Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged
  4. C语言发展历程及其保留字(关键字)——附:C语言标准文档
  5. Linux系统性能监控之6个vmstat和6个iostat命令
  6. Replace 在动态sql中的实现
  7. redhat 6、7配置yum源
  8. (原创)C++11改进我们的程序之简化我们的程序(四)
  9. git 常用命令以及解决问题方法
  10. 删除mysql备份文件