Feature Release (RC1)
Pre-release
Pre-release
New Features
- Advanced disposable object analysis built around the
[MustDisposeResource]
and[HandlesResourceDisposal]
annotations.- Disposable type should now be annotated with the
[MustDisposeResource]
, which is inherited by derived types. Disposable ref structs cannot implement interfaces, their constructors (as well as primary constructors) should now be annotated with the[MustDisposeResource]
. - In rare cases, some disposable objects should not be disposed, such types should be annotated with the
[MustDisposeResource(false)]
, which is not inherited by derived types. - Methods returning disposable objects should also be annotated with the
[MustDisposeResource]
, which is inherited by derived types. - As with types, methods returning disposable objects that aren't intended to be disposed, should be annotated with the
[MustDisposeResource(false)]
, which is not inherited by derived types. - The same also applies to out parameters.
- The
[Pure]
,[MustUseReturnValue]
, and[MustDisposeResource]
annotations cannot be applied at the same time. - New warning when an overridden method changes its return type, which becomes disposable.
- New context action to apply the
[HandlesResourceDisposal]
annotation.
- Disposable type should now be annotated with the
- Collection expressions (require C# 12)
- Suggests replacing target-typed empty arrays (incl.
Array.Empty<T>()
expressions) with the empty collection expression[]
. - Suggests more cases to use collection expression, e.g. when the target type is
IEnumerable<T>
, but an array orList<T>
is constructed. - Suggests using empty collection expression
[]
when new empty collection objects are created and the target type is the collection type.
- Suggests replacing target-typed empty arrays (incl.
- New warning that an
[AttributeUsage]
annotations are missing on attribute classes (with a quick fix to apply the annotation). - New context action to apply the
[IgnoreSpellingAndGrammarErrors]
annotation - Equality analyzers
- New warning when a struct overrides the
Equals
without implementing theIEquatable<T>
interface. - New warning when a type implements the
IEquatable<T>
interface without overriding theEquals
method. - New suggestion to implement the
IEqualityOperators<T, T, bool>
interface when theIEquatable<T>
interface is implemented (with a quick fix). Records automatically implement theIEquatable<T>
interface and provide the equality operators. The analyzer requires .NET 7 or higher. - New suggestion to implement the
IComparisonOperators<T, T, bool>
interface when theIComparable<T>
interface is implemented (with a quick fix). The analyzer requires .NET 7 or higher.
- New warning when a struct overrides the
Improved
- Analyzer that suggests replacing array made out of default values (
new T[] { default, default }
) with thenew T[n]
expression now supports collection expressions. - Analyzer that detects redundant captured context now supports the overloaded
ConfigureAwait
method introduced in .NET 8.0. - Context actions to apply
[LinqTunnel]
,[NonNegativeValue]
, and[ValueRange(...)]
now support local functions
Known Issues
- Async methods that return disposable objects should be annotated with the
[MustUseReturnValue]
. Annotating them with[MustDisposeResource]
is not supported by ReSharper yet. The issue is reported to the ReSharper team.