2

次のようなファイルタイプのロードを通過するメソッドがあります。

case ".jpg": 
    res = "image/jpeg"; 
    break;
case ".pdf": 
    res = "application/pdf"; 
    break;
case ".doc": 
    res = "application/msword"; 
    break;

..これは数百行続きます。そして、StyleCop エラーが発生しました。SP2101: Method body must not contain more than 120 code lines

私は周りを検索しましたが、抑制は言うまでもなく、これについては何も見つかりません。このメッセージを抑制する方法を知っている人はいますか?

編集StyleCop+:これはエラーであり、FxCop プログラムを使用して抑制をコピーしても解決できないと思います。

4

3 に答える 3

8

これを:にリファクタリングできます。Dictionary<string,string>

var mimeTypesPerFileType = new Dictionary<string,string>();
mimeTypesPerFileType.Add(".jpg", "image/jpeg");
mimeTypesPerFileType.Add(".pdf", "application/pdf");
...

これにより、メソッドの行数が約3分の1に削減されます(ただし、これは別のメソッド/フィールドにある可能性があるため、毎回辞書を再作成する必要はありません)。

そして、メソッドは次のように変更されます。

return mimeTypesPerFileType[fileType];

アップデート:

約400の奇妙なケース(メソッドでは約1300行)があるので、実際にはファイルまたはデータベースからこのマップをロードする必要があります。これは確かに行数を減らします。

于 2012-04-11T15:55:44.963 に答える
6

私は StyleCop+ の作者です。

元の StyleCop 機能に追加されるルールの 1 つは、メソッドのサイズをチェックするSP2101 (MethodMustNotContainMoreLinesThan)です。

他の StyleCop 警告と同様に、次のようになります。

  • 無効になっている場合は、必要ないことを意味します
  • コードの特定の場所で抑制されています(一般的にはまだ必要ですが、ここでは必要ない場合)

さらに、それは構成可能です。このルールを使用する場合は、独自の構成で120の代わりに任意の数値を指定できます。120は単なるデフォルトです。

このルールのポイントは保守性です。スパゲッティ コードに陥っていないことを確認することは非常に重要です。StyleCop は、それを制御する機能を提供する単なるツールです。StyleCop+ には、チェックするルールがいくつかあります。したがって、それらを使用したい場合は、先に進んでください。そうでない場合は、無効にしてください。これは、使用前に実際に構成する必要がある一種のツールです。

設定に関して何か助けが必要な場合はお知らせください。

于 2012-04-11T20:34:47.043 に答える
4

私は StyleCop を使用していませんが、アプローチを変更することをお勧めします。これらの値のペアをすべて XML ファイルなどに保存し、 を使用しList(Of T)てすべてを整理できます。メソッドは数行に減らすことができます。

于 2012-04-11T15:54:17.563 に答える