ReSharper添加对最新C#11特性的支持
C#11
UTF-8文字-增加了对UTF-8文字的基本支持。代码分析现在建议对文字使用u8后缀,而不是System.Text.Encoding.UTF8.GetBytes()方法或具有适当UTF8符号的字节数组。还有一组UTF-8文本的编译器警告和错误。
文件本地类型-添加了对文件本地类型的基本支持,包括对新语法的理解、类型的文件可访问性修饰符、编译器警告和错误以及相应的快速修复,例如当为嵌套类指定文件修饰符时,将类移到外部范围。还有一个有用的上下文操作可以将常规类型转换为文件类型。
原始字符串-ReSharper现在可以将常规字符串和逐字字符串转换为原始字符串。这也意味着字符串的许多现有功能现在可用于原始字符串。
列表模式建议-引入了使用新的C#11列表模式语法(而不是使用后续索引器访问表达式进行常规的集合长度检查)来检查集合的相应项的建议。
静态虚拟成员-从C#11开始,您可以对接口中的静态成员使用抽象和虚拟修饰符,并在具有受此接口约束的类型参数的泛型代码中使用此类成员。ReSharper已更新为以处理普通多态成员的方式处理多态静态成员:
檐沟上的继承标记。
导航到实施/超级成员。
缺少实现的生成。
override关键字之后的代码完成建议还包括接口成员,因此现在可以轻松实现抽象或虚拟静态成员。
无符号右移(>>>)运算符-ReSharper现在认识到C#开发人员为执行有符号数据类型的无符号右移而必须编写的繁琐代码模式,并建议在C#11中使用无符号右移运算符。
跨跨度模式匹配-如果你解析字符的跨度,你可能会使用MemoryExtensions。SequenceEqual方法很多。C#11为这种检查引入了一种速记。现在,您可以使用is或switch表达式简单地将字符的Spans与字符串文本进行模式匹配。ReSharper现在建议使用is或switch表达式,而不是大量的if语句。
ref字段和作用域关键字
从C#11开始,允许在ref结构中声明ref字段。ReSharper支持这个新的语法规则,提供所有编译器错误和警告,在代码完成时显示ref关键字,并允许在构造函数中初始化这些字段。
ReSharper还知道一个新的作用域关键字,您可以在by-ref或ref结构参数和局部变量上使用该关键字。支持包括正确解析新语法、代码完成中的作用域关键字,以及在生成方法重写时保留作用域关键字。它还验证作用域修饰符的兼容性,并为重写、接口实现和委托转换上不匹配的作用域参数提供快速修复。
C#11和Microsoft.NET 7也对该语言的引用安全规则进行了修改。这些更改控制ref和ref结构变量可用于哪些操作,以便通过引入ref字段在托管代码中提供ref安全性。ReSharper现在知道了这些更改,并将帮助您找到项目中需要更新的部分,并使用新的作用域关键字进行注释,以适应迁移到C#11或.NET 7时的更改。
语言注入
对语言注入的支持进行了一些更改:
语言注入现在在C#11原始字符串文本中工作。
ReSharper支持.NET7中的[StringSyntax]属性,以及用于语言注入和代码完成的不同语法。
常规C#更新
全局导入槽标记-添加了一个新的槽标记图标,以通知用户C#和Razor文件中的隐式命名空间导入。
格式字符串完成-在.NET7中添加Int128和UInt128数字类型后,代码完成格式说明符建议已更新。还添加了.NET 6中缺少对DateOnly和TimeOnly日期/时间类型的支持,以及.NET 5中引入的半精度浮点数字类型。
表达式的琐碎模式-有时在重构之后,模式匹配表达式可能会变成琐碎的递归模式。此时,使用递归模式语法可能根本不值得,因此ReSharper现在提供了将模式重写为更简单的表达式的操作,同时保留了原始的模式匹配语义。