C# 7.0 添加和增强的功能【基础篇】( 四 )

 关键字以声明 ref 局部变量 。
public ref Person GetContactInformation(string fname, string lname)// 对 p 进行的操作不会改变原方法的返回值Person p = contacts.GetContactInformation("Brandie", "Best");上面的分配将 p 声明为本地变量 。它的初始值是通过读取 GetContactInformation 返回的值进行复制 。之后对 p 的任何分配都不会更改 GetContactInformation 返回的变量值 。变量 p 不再是返回的变量的别名 。
声明引用本地变量,复制原始值的别名 。在下面的分配中,p 是从 GetContactInformation 返回的变量的别名 。
// 对 p 所做的更改,也会更改从 GetContactInformation 返回的变量ref Person p = ref contacts.GetContactInformation("Brandie", "Best");后续使用 p 等同于使用 GetContactInformation 返回的变量 , 因为 p 是此变量的别名 。
可通过相同方式按引用访问值 。在某些情况下,按引用访问值可避免潜在的高开销复制操作,从而提高性能 。
编译器对ref变量强制实施范围规则:ref类型中的ref struct局部变量、ref参数和ref字段 。这些规则可确保引用不会与引用的对象不相称 。
九、引用返回返回值可以通过引用返回 (ref 返回)。借助引用返回值 , 方法可以将对变量的引用(而不是值)返回给调用方 。然后,调用方可以选择将返回的变量视为按值返回或按引用返回 。
如果声明方法返回引用返回值,表明方法返回变量别名 。这样做通常是为了让调用代码有权通过别名访问此变量(包括修改它) 。因此,方法的引用返回值不得包含返回类型 void
引用返回值是指,方法返回对某变量的引用(或别名) 。
返回引用返回值的方法必须满足以下两个条件:
??1)方法签名在返回类型前面有ref关键字;
??2)方法主体中的每个 return 语句都在返回实例的名称前面有 ref 关键字 。
public ref Person GetContactInformation(string fname, string lname){return ref p;}十、弃元弃元是一种在应用程序代码中人为取消使用的临时虚拟变量 。弃元相当于未赋值的变量;它们没有值 。
弃元将意图传达给编译器和其他读取代码的文件:你打算忽略表达式的结果、元组表达式的一个或多个成员、方法的 out 参数或模式匹配表达式的目标 。
弃元使代码意图更加明确 。弃元指示代码永远不会使用变量 。它们可以增强其可读性和可维护性 。
通过将下划线 (_) 赋给一个变量作为其变量名,指示该变量为一个占位符变量 。
// 以下方法调用返回一个元组,其中第一个值和第二个值为弃元 。// area 是以前声明的变量 , 设置为由 GetCityInformation 返回的第三个组件(_, _, area) = city.GetCityInformation(cityName);当 _ 是有效弃元时,尝试检索其值或在赋值操作中使用它时会生成编译器错误 CS0301:“当前上下文中不存在名称 "_"” 。出现此错误是因为 _ 未赋值 , 甚至可能未分配存储位置 。如果它是一个实际变量,则不能像之前的示例那样对多个值使用弃元 。
独立弃元用来指示要忽略的任何变量 。
一种典型的用法是使用赋值来确保一个参数不为 null 。下面的代码使用弃元来强制赋值 。赋值的右侧使用 Null 合并操作符 , 用于在参数为 null 时引发 System.ArgumentNullException 。此代码不需要赋值结果 , 因此将对其使用弃元 。
// 使用弃元来强制赋值// 赋值的右侧使用 Null 合并操作符,用于在参数为 null 时引发 System.ArgumentNullException// 此代码不需要赋值结果,因此将对其使用弃元public static void Method(string arg){_ = arg ?? throw new ArgumentNullException(paramName: nameof(arg), message: "arg can't be null");}十一、二进制文本固定值称为文字 。文字是变量使用的值 。
在 C# 7.0 之前,有六种类型的文字可用 , 它们是一个

推荐阅读