首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

温故之C# 便捷语法二(2)

温故之C# 便捷语法二(2)

占位符
方法返回值中的占位

占位符相当于未赋值的变量,它们没有值。被放弃的变量将不为该变量分配存储空间,所以弃元可减少内存分配。
使用场景:假定有如下函数(该函数在一个单独的不可更改的程序集中),该函数用于获取具体位置:

    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 之后的值。
返回列表