13

エラーCA1822:Microsoft.Performance:「SomeController.AnAction(string、string)」の「this」パラメータ(またはVisual Basicでは「Me」)は使用されません。メンバーを静的(またはVisual Basicでは共有)としてマークするか、必要に応じて、メソッド本体または少なくとも1つのプロパティアクセサーで「this」/「Me」を使用します。

静的アクションでは、URL経由でリクエストされたときに404が見つかりません。コード分​​析をオフにすると、アクションは期待どおりに機能します。これのポイントは何ですか、そして適切な救済策は何ですか?

アクションの戻りタイプはPartialViewResultであることに注意してください。戻りタイプがActionResultの場合、コード分析がこれについて文句を言うようには見えません。

    [HttpPost]
    public PartialViewResult BlankEditorRow(string formId, Common.Entities.Common.ObjTypeEnum objType)
    {
        if (objType == Common.Entities.Common.ObjTypeEnum.Regular)
            return new AjaxPartialViewResult("_RowEditor", new ProcedureEntryEntity()) { UpdateValidationForFormId = formId };
        else
            return new AjaxPartialViewResult("_TemplateRowEditor", new ProcedureEntryEntity()) { UpdateValidationForFormId = formId };
    } 

更新:リターンタイプをActionResultに変更するとエラーが解決するように見えます。また、PartialViewResultはActionResultであるため、機能するはずです。

4

2 に答える 2

10

インスタンスメンバーを使用せずに戻り値の型を変更しても、実際に問題が解決するとは思えません。戻り値の型を変更するために、return ステートメントをインスタンス メンバーにアクセスするものに変更したと思われます。

MVC のルート処理でメソッドを静的としてマークできるかどうかはわかりませんが、調査する価値はあります。警告はパフォーマンスの観点から出されますが、意図と読みやすさの観点から考えます。

通常、メソッドまたはプロパティが (静的ではなく) インスタンス メンバーである理由は 2 つあります。

  • オブジェクトの状態によって動作が異なるため、別のインスタンス メンバーにアクセスする必要があります。
  • 動作をオーバーライドできるように、呼び出されるインスタンスの実際の型に基づいてポリモーフィックに動作する必要があります。

これらのいずれにも当てはまらない場合は、メソッドを静的にすることができます。これは、ポリモーフィズムが予期されておらず、インスタンスの状態が必要ないことを示します。静的メンバーは、それが依存する唯一の状態が型自体 (およびパラメーター) の状態であること、および多態的に動作しないことを効果的にアドバタイズします。つまり、インスタンスをまったく作成せずにテストできるということです。

もちろん、MVC のインフラストラクチャでインスタンス メソッドにする必要がある場合は、その事実を示すコメントを付けて警告を抑制する必要があります。

于 2012-05-30T18:30:14.213 に答える
5

CAは、これがMVCアプリのコントローラーアクションであることを考慮していないと思います。私は抑制します。

于 2012-05-24T16:26:18.467 に答える