1. 索引 fixed 字段不须要进行固定
留神此项是针对指针,也就是不平安代码这块
定义一个构造体
unsafe struct S { public fixed int myFixedField[10]; }
在晚期版本的 C# 中,须要固定变量能力拜访属于 myFixedField 的整数之一。 当初,以下代码进行编译,而不将变量 p 固定到独自的 fixed 语句中:
class C { static S s = new S(); unsafe public void M() { int p = s.myFixedField[5]; } }
变量 p 拜访 myFixedField 中的一个元素。 无需申明独自的 int* 变量。 请留神,你依然须要 unsafe 上下文。 在晚期版本的 C# 中,须要申明第二个固定的指针:
class C { static S s = new S(); unsafe public void M() { fixed (int* ptr = s.myFixedField){ int p = ptr[5]; } }}
无关详细信息,请参阅无关 fixed 语句的文章。
2.可能会重新分配 ref 局部变量
当初,在对 ref 局部变量进行初始化后,可能会对其重新分配,以援用不同的实例。 以下代码当初编译:
ref VeryLargeStruct refLocal = ref veryLargeStruct; // 初始化refLocal = ref anotherVeryLargeStruct; // 重新分配后,反射援用不同的存储。
3 stackalloc 数组反对初始值设定项
留神此项是针对指针,也就是不平安代码这块
当你对数组中的元素的值进行初始值设定时,你已可能指定该值:
var arr = new int[3] {1, 2, 3};var arr2 = new int[] {1, 2, 3};
当初,可向应用 stackalloc 进行申明的数组利用同一语法:
int* pArr = stackalloc int[3] {1, 2, 3};int* pArr2 = stackalloc int[] {1, 2, 3};Span<int> arr = stackalloc [] {1, 2, 3};
4 加强的泛型束缚
当初,能够将类型 System.Enum 或 System.Delegate 指定为类型参数的基类束缚。
当初也能够应用新的 unmanaged 束缚来指定类型参数必须为“非托管类型” 。 “非托管类型” 不是援用类型,且在任何嵌套级别都不蕴含任何援用类型。
无关详细信息,请参阅无关 where 泛型束缚和类型参数的束缚的文章。
将这些束缚增加到现有类型是不兼容的更改。 封闭式泛型类型可能不再满足这些新束缚的要求。
5 元组反对 == 和 !=
C# 元组类型当初反对 == 和 !=。 无关详细信息,请参阅无关元组一文中的转换等式局部。
6.将个性增加到主动实现的属性的反对字段
当初反对此语法:
[field: SomeThingAboutFieldAttribute]public int SomeProperty { get; set; }
属性 SomeThingAboutFieldAttribute 利用于编译器生成的 SomeProperty 的反对字段。
in 办法重载解析
在增加 in 参数修饰符时,这两个办法将导致多义性:
static void M(S arg);static void M(in S arg);
小破站: https://www.bilibili.com/video/BV15o4y167uX
抖茵: https://www.douyin.com/user/self?modal_id=7207950726826364219...