CA2263: Prefer generic overload when type is known
Value | |
---|---|
Rule ID | CA2263 |
Title | Prefer generic overload when type is known |
Category | Usage |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 9 | As suggestion |
Cause
A method overload that accepts a System.Type argument is called when the type is known at compile time and a suitable generic overload is available.
Rule description
Generic overloads are preferable to overloads that accept an argument of type System.Type when the type is known at compile time (using the typeof operator in C# or the GetType operator in Visual Basic). Generic overloads promote cleaner and more type-safe code with improved compile-time checks.
How to fix violations
To fix a violation of this rule, use the suitable generic overload.
Example
The following code snippet shows a violation of CA2263:
int size = Marshal.SizeOf(typeof(bool));
Dim size As Integer = Marshal.SizeOf(GetType(Boolean))
The following code snippet fixes the violation:
int size = Marshal.SizeOf<bool>();
Dim size As Integer = Marshal.SizeOf(Of Boolean)()
When to suppress warnings
It is safe to suppress a warning from this rule; however, we recommend that you use a generic overload if possible.
Suppress a warning
If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.
#pragma warning disable CA2263
// The code that's violating the rule is on this line.
#pragma warning restore CA2263
To disable the rule for a file, folder, or project, set its severity to none
in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA2263.severity = none
For more information, see How to suppress code analysis warnings.