CA1716: Identifiers should not match keywords

Property Value
Rule ID CA1716
Title Identifiers should not match keywords
Category Naming
Fix is breaking or non-breaking Breaking
Enabled by default in .NET 8 No

Cause

The name of a namespace, type, or virtual or interface member matches a reserved keyword in a programming language.

By default, this rule only looks at externally visible namespaces, types, and members, but you can configure visibility and symbol kinds.

Rule description

Identifiers for namespaces, types, and virtual and interface members should not match keywords that are defined by languages that target the common language runtime. Depending on the language that is used and the keyword, compiler errors and ambiguities can make the library difficult to use.

This rule checks against keywords in the following languages:

  • Visual Basic
  • C#
  • C++/CLI

Case-insensitive comparison is used for Visual Basic keywords, and case-sensitive comparison is used for the other languages.

How to fix violations

Select a name that does not appear in the list of keywords.

When to suppress warnings

You can suppress a warning from this rule if you're sure that the identifier won't confuse users of the API, and that the library is usable in all available languages in .NET.

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 CA1716
// The code that's violating the rule is on this line.
#pragma warning restore CA1716

To disable the rule for a file, folder, or project, set its severity to none in the configuration file.

[*.{cs,vb}]
dotnet_diagnostic.CA1716.severity = none

For more information, see How to suppress code analysis warnings.

Configure code to analyze

Use the following options to configure which parts of your codebase to run this rule on.

You can configure these options for just this rule, for all rules it applies to, or for all rules in this category (Naming) that it applies to. For more information, see Code quality rule configuration options.

Include specific API surfaces

You can configure which parts of your codebase to run this rule on, based on their accessibility. For example, to specify that the rule should run only against the non-public API surface, add the following key-value pair to an .editorconfig file in your project:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Analyzed symbol kinds

You can configure the kinds of symbols that will be analyzed by this rule. The allowable values are:

  • Namespace
  • NamedType
  • Method
  • Property
  • Event
  • Parameter

Separate multiple values with a comma (,). The default value includes all of the symbol kinds in the previous list.

dotnet_code_quality.CA1716.analyzed_symbol_kinds = Namespace, NamedType, Method, Property, Event