[解決済み] ReSharperの好奇心。「パラメータは前提条件のチェックにのみ使用されます。
2022-05-17 02:01:17
質問
なぜReSharperはこのコードを判定するのでしょうか?
private Control GetCorrespondingInputControl(SupportedType supportedType, object settingValue)
{
this.ValidateCorrespondingValueType(supportedType, settingValue);
switch(supportedType)
{
case SupportedType.String:
return new TextBox { Text = (string)settingValue };
case SupportedType.DateTime:
return new MonthPicker { Value = (DateTime)settingValue, ShowUpDown = true };
default:
throw new ArgumentOutOfRangeException(string.Format("The supported type value, {0} has no corresponding user control defined.", supportedType));
}
}
private void ValidateCorrespondingValueType(SupportedType supportedType, object settingValue)
{
Type type;
switch(supportedType)
{
case SupportedType.String:
type = typeof(string);
break;
case SupportedType.DateTime:
type = typeof(DateTime);
break;
default:
throw new ArgumentOutOfRangeException(string.Format("The supported type value, {0} has no corresponding Type defined.", supportedType));
}
string exceptionMessage = string.Format("The specified setting value is not assignable to the supported type, [{0}].", supportedType);
if(settingValue.GetType() != type)
{
throw new InvalidOperationException(exceptionMessage);
}
}
2番目のメソッドValidateCorrespondingValueTypeの"settingValue"パラメータは、ReSharperによって以下のメッセージとともにグレーアウトされています。 "パラメータ 'settingValue' は、前提条件のチェックにのみ使用されます。
解決方法は?
判断しているのではなく、助けようとしているのです :)
ReSharperは、パラメータが例外を投げるためのチェックにしか使われていないと判断した場合、そのパラメータを実際に使っていないことを示すために、グレーアウトさせます。これは間違いである可能性が高いです。なぜ使う予定のないパラメータを渡すのでしょうか?通常、これは事前条件で使用した後、コードの他の場所で使用することを忘れている (または、もはや必要ない) ことを示します。
このメソッドはアサーションメソッドなので (つまり、このメソッドが行うのは有効であることを表明することだけです)、 このメッセージを抑制するために
ValidateCorrespondingValueType
をアサーションメソッドとしてマークし、ReSharper の
アノテーション属性
を、具体的には
[AssertionMethod]
属性があります。
[AssertionMethod]
private void ValidateCorrespondingValueType(SupportedType supportedType, object settingValue)
{
// …
}
関連
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み] 2つのリストを結合する
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] 数字のみの正規表現
-
[解決済み】C#のyieldキーワードは何に使われるのか?
-
[解決済み】C#アプリケーションでSecureStringが実用化されることはありますか?
-
[解決済み] ReSharperのGetHashCodeのオーバーライドに'397'が使用されているのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み] 関数を終了するには?
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である