内容提要
JetBrains将发布ReSharper和Rider 2024.2,为C# 13和当前的C#和VB.NET引入了新功能。他们引入了检查功能,用于识别性能问题和等式检查,并添加了一种新的属性,用于标记用于等式检查的类型或参数。他们还放宽了对ref struct类型的一些限制,允许接口继承。此外,他们还为DateTime和DateOnly类型添加了一个区域预览工具提示和一个上下文操作,用于排序使用指令。
延伸解读
等式分析:从性能陷阱到意外发现
文章指出,结构体默认的Equals和GetHashCode实现会带来装箱和反射开销,在热路径中影响性能。2024.2新增的检查能识别这类问题,并建议通过生成等式成员或转为record struct来修复。此外,新属性[DefaultEqualityUsage]帮助标记用于等式检查的类型或参数,对BCL的标注还揭示了ConcurrentDictionary的AddOrUpdate会检查TValue的相等性,这可能是开发者未曾预料的行为。
ref struct接口继承:灵活性与约束的平衡
C# 13允许ref struct实现接口,这放宽了之前的限制,但泛型方法要接受ref struct参数,必须添加allows ref struct反约束,以防止装箱破坏性能优势。文章示例中,即使ArrayLikeSpan实现了IArrayLike,直接调用泛型方法仍会报错,需通过快速修复添加约束。这一变化在提升灵活性的同时,也要求开发者显式声明意图,确保代码不引入隐藏的装箱开销。
文化预览与using排序:提升日常开发体验
针对DateTime和DateOnly等类型,新版本增加了文化预览工具提示,展示值在不同流行文化(包括当前OS文化)下的渲染效果,帮助开发者避免因文化差异导致的格式化错误。同时,新增的“排序using指令”上下文操作,能独立于其他清理步骤,确保导入列表有序,减少手动合并带来的混乱。这些改进虽小,却直接提升了代码的整洁度和可维护性。
Q&A
ReSharper和Rider 2024.2有哪些新功能?
ReSharper和Rider 2024.2引入了C# 13和VB.NET的新功能,包括等式分析、ref结构、文化预览和使用指令的排序等。
什么是[DefaultEqualityUsage]属性,它的作用是什么?
[DefaultEqualityUsage]属性用于标记类型或参数,以指示它们用于等式检查,帮助识别性能问题。
C# 2024.2中对ref struct类型的限制有哪些变化?
C# 2024.2放宽了对ref struct类型的限制,允许它们继承接口,从而支持更多高性能场景。
如何使用ReSharper 2024.2进行等式分析?
ReSharper 2024.2引入了新的检查功能,可以识别不高效的运行时等式检查,并提供生成等式成员的修复建议。
文化预览工具提示的功能是什么?
文化预览工具提示显示DateTime和DateOnly类型在不同文化下的格式化效果,帮助开发者选择正确的格式化说明符。
如何在ReSharper 2024.2中排序使用指令?
ReSharper 2024.2新增了排序使用指令的上下文操作,可以独立于其他清理步骤触发,确保导入列表有序。