C# 9や10と同様に、C# 11に新たなコンパイラ警告が静かに追加された。このオプトイン(警告とするかをユーザが選択できる)警告により、すべてが小文字の型名(クラス、構造体、インターフェースなど)の使用を防ぐことができる。
この警告は、Microsoftが将来新しいキーワードをより容易に追加できるようにするために作成された。C#キーワードは常に全てが小文字のASCII文字で構成されているため、それ以外の文字を含めると、その型名が将来使われる可能性があるキーワードと衝突するのを防ぐことができる。
警告のドキュメントに、どのキーワードが検討されているかについて詳細が記載されることはない。
背景
C#ツールチェーンは常に、メッセージをコンパイラエラー、コンパイラ警告、静的分析警告の3つの大きなタイプに分けてきた。エラーは、コンパイラの作業完了を止めるショーストッパーである。エラーが発生した場合、コンパイラは基本的に、検出した問題を無視できないと言っていることになる。
次のレッスンはコンパイラ警告についてである。これは、重大な問題が存在することを意味するが、コンパイラは出力ファイルを生成できる。これらはデフォルトで有効になっているが、開発者は無視できる。あるいは、開発者はエラーのように扱うように要求できる。
最後のタイプは本質的に「その他すべて」である。静的分析エラーは、特定の種類のアプリケーション、またはアプリケーションの一部でのみ問題になる可能性がある。コンパイラ警告よりも、誤検知、つまり不適切な警告が発生しやすくなる。他のタイプとは異なり、静的分析の警告はデフォルトでは有効になっていない。Roslynコンパイラが導入される前は、これらは完全に別のツールの一部であった。したがって、かなりの数の開発者がそれを使ったことがない。
歴史的に、Microsoftは新しいコンパイラ警告を追加することを躊躇してきた。これはデフォルトで有効になっているため、新しいものを追加することは重大な変更と見なされてきた。仮に、警告が追加され、TreatWarningsAsErrorsが有効になっている場合、コードはC# 7ではコンパイルされ、C# 8ではコンパイルされない。
C# 9から、MicrosoftはC# Warning Wavesの概念を追加した。これはコンパイラ警告の追加である。つまり、別のツールやパッケージをインストールする必要はないが、デフォルトでは有効になっていないことを意味する。使うには、プロジェクトファイルのAnalysisLevelを5以上に設定する必要がある。