更新 : 2007 年 11 月
TypeName |
DoNotNameEnumValuesReserved |
CheckId |
CA1700 |
カテゴリ |
Microsoft.Naming |
互換性に影響する変更点 |
あり |
原因
列挙体のメンバ名に、"reserved" という単語が含まれています。
規則の説明
この規則では、"reserved" を含む名前の列挙体のメンバは、現在使用されていなくても、将来的なバージョンでは名前を変更するか削除されるプレースホルダと想定しています。メンバの名前変更や削除は、互換性に影響する変更点です。"reserved" が含まれる名前であるという理由だけで、ユーザーがメンバを無視するとは限りません。また、ユーザーがドキュメントを読んだり内容に従うことも期待できません。さらに、予約済みのメンバもオブジェクト ブラウザと高機能の統合開発環境に表示されるため、実際に使用されているメンバがわかりづらくなります。
将来的なバージョンでは、予約済みのメンバを使用するのではなく、列挙体に新しいメンバを追加します。ほとんどの場合、新しいメンバの追加によって元のメンバ値が変化しなければ、互換性に影響はありません。
元のメンバで元の値を保持している場合でもメンバの追加によって互換性に影響が及ぶ状況は限られています。第 1 に、既存のコード パスから新しいメンバを返すことはできません。新しいメンバを返すには、互換性に影響のある呼び出し元が、メンバ リスト全体を網羅する戻り値で switch (Visual Basic では Select) ステートメントを使用する方法と、既定のときに例外をスローする方法があります。第 2 に、クライアント コードでは、Enum.IsDefined などのリフレクション メソッドによる動作が変化したときに処理できない問題が考えられます。したがって、既存のメソッドから新しいメンバを返す必要がある場合、またはリフレクションの不適切な使用方法に起因するアプリケーション互換性問題がある場合、互換性に影響を及ぼさない唯一のソリューションは、元のメンバと新しいメンバを含む新しい列挙体を追加し、元の列挙体に System.ObsoleteAttribute 属性でマークする方法です。このとき、外部から参照できる型または元の列挙体を公開するメンバの場合と同じ手順に従います。
違反の修正方法
この規則違反を修正するには、メンバを削除するか名前を変更します。
警告を抑制する状況
メンバが現在使用されている場合、または以前にリリース済みのライブラリを対象としている場合は、この規則による警告を抑制しても安全です。