占位符
方法返回值中的占位
占位符相当于未赋值的变量,它们没有值。被放弃的变量将不为该变量分配存储空间,所以弃元可减少内存分配。
使用场景:假定有如下函数(该函数在一个单独的不可更改的程序集中),该函数用于获取具体位置:
public (string Province, string City, string Address) GetLocation() {
return ("Sichuang", "Chengdu", "Hi-Tech Zone");
}
现我们只需要获取城市,而不需要省份与具体地址,则可以以如下方式调用:
var (_, city, _) = GetLocation();
这样有个好处,可以节省内存,因为系统将不会为 Province 和 City 分配内存。
out 参数中的占位
使用场景:比如我们需要验证用户输入的手机号是否为三大运营商发行的号段,以前是这样的:
string phoneNumber;
if (Utils.ParsePhoneNumber(phoneNumberStr, out phoneNumber)) {
Console.WriteLine("This is a phone number");
} else {
Console.WriteLine("Not a phone number");
}
现在我们可以这样写,除了语法更加简洁,还可以稍微节约点内存(因为我们此处并不需要解析后的号码,这个用户已经输入了,我们仅需要判断是否符合条件即可):
if (Utils.ParsePhoneNumber(phoneNumberStr, out _)) {
Console.WriteLine("This is a phone number");
} else {
Console.WriteLine("Not a phone number");
}
is 模式表达式
is 模式表达式扩展了常用 is 运算符,使其可查询其类型之外的对象。它可以在检查类型过程中编写变量初始化。
object obj = "value";
if (obj is string tmp) {
Console.WriteLine($"obj is a string, value is {tmp}");
}
这部分的意思是,如果 obj 是 string 类型的实例,则分配临时变量 tmp 来保存转换为 string 之后的值。 |