2023-08-15 Untiy进阶 C#知识补充5——C#6主要功能与语法

文章目录

注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。

一、概述

​ C#6 的新增功能和语法主要包含:

  • =>运算符(C# 进阶内容)
  • Null 传播器(C# 进阶内容)
  • 字符串内插(C# 进阶内容)
  • 静态导入
  • 异常筛选器
  • nameof 运算符

二、静态导入

  • 用法:在引用命名空间时,在 using 关键字后面加入 static 关键词。

  • 作用:无需指定类型名称即可访问其静态成员和嵌套类型。

  • 好处:节约代码量,可以写出更简洁的代码。

csharp 复制代码
using static UnityEngine.Mathf; // 静态导入 Mathf 类
using static Test3;             // 静态导入 Test3 类

public class Test3
{
    public class Test4 { }

    public static void TTT() {
        Debug.Log("123");
    }
}

public class Lesson7 : MonoBehaviour
{
    void Start() {
        Max(10, 20);           // Mathf.Max(10, 20);
        TTT();                 // Test3.TTT();
        Test4 t = new Test4(); // Test3.Test4 t = new Test3.Test4();
    }
}

三、异常筛选器

  • 用法:在异常捕获语句块中的 Catch 语句后通过加入 when关 键词来筛选异常

    ​ when(表达式)该表达式返回值必须为 bool 值,如果为 ture 则执行异常处理,如果为 false,则不执行。

  • 作用:用于筛选异常

  • 好处:帮助我们更准确的排查异常,根据异常类型进行对应的处理

csharp 复制代码
try {
    // 用于检查异常的语句块
}
catch (System.Exception e) when (e.Message.Contains("301")) {
    // 当错误编号为301时  作什么处理
    print(e.Message);
}
catch (System.Exception e) when (e.Message.Contains("404")) {
    // 当错误编号为404时  作什么处理
    print(e.Message);
}
catch (System.Exception e) when (e.Message.Contains("21")) {
    // 当错误编号为21时  作什么处理
    print(e.Message);
}
catch (System.Exception e) {
    // 当错误编号为其它时  作什么处理
    print(e.Message);
}

四、nameof 运算符

  • 用法:nameof(变量、类型、成员)通过该表达式,可以将他们的名称转为字符串
  • 作用:可以得到变量、类、函数等信息的具体字符串名称,方便重构,避免改字符串中的内容
csharp 复制代码
int i = 10;
List<int> list = new List<int>() { 1, 2, 3, 4 };

print(nameof(i));              // "i"
print(nameof(List<int>));      // "List"
print(nameof(List<int>.Add));  // "Add"
print(nameof(UnityEngine.AI)); // "AI"
print(nameof(list));           // "list"
print(nameof(list.Count));     // "Count"
print(nameof(list.Add));       // "Add"
相关推荐
nice_lcj52012 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐12 小时前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm14 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶14 小时前
慢就是快16-1协程
开发语言·前端·python
Dovis(誓平步青云)14 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄14 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
.痞老板.16 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
奇树谦16 小时前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
青梅味猪大肠16 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
宝桥南山16 小时前
.NET 11 - 尝试一下Blazor中的新特性SupplyParameterFromTempData
microsoft·微软·c#·asp.net·.net·.netcore