9

私はC#を使用して計算モジュールに取り組んでいますが、これにぶつかりました:

double v = 4 / 100;

私はこれが間違った初期化であることを知っていますv = 0.0v = 0.04

C# の規則では、次のように、メンバーの少なくとも 1 つが doubleであることを確認する必要があります。

double v = (double) 4 / 100;
double v = 4.0 / 100;

しかし、私は整数変数操作を含むその種の初期化を数多く行っており、そのような間違いを検出するためにコードを 1 行ずつ参照するのが面倒です。

代わりに、これについてコンパイラから警告を受けることは可能ですか?

4

2 に答える 2

5

さて、いくつか遊んだ後、解決策があります。この記事を使用してこのソリューションにたどり着きました。私はStyleCopを使用しているため、それを入手してインストールする必要があります。次に、私の C# プロジェクトMathematicsAnalyzerをダウンロードできます。

まず、すべての型変換の不一致を説明したわけではありません。実際、私は 1 つの部分だけを収容します。

基本的に、行に「double」とそれに続くスペースが含まれているかどうかを確認します。クラスの終わりが double またはその他の任意の数になる可能性があるため、誤った警告につながる可能性があることは知っていますが、型を適切に分離する方法を理解するためにそれを残します。

一致が見つかった場合は、次の正規表現と一致するかどうかを確認します。

double[ ][A-Za-z0-9]*[ ]?=(([ ]?[0-9]*d[ ]?/[ ]?[0-9]*;)|[ ]?[0-9]*[ ]?/[ ]?[0-9]*d;)

この正規表現に一致しない場合は、違反を追加します。この正規表現が一致するのは、次のいずれかです。

  • ダブル i=4d / 100;
  • ダブル i = 4d / 100;
  • ダブル i = 4 / 100d;
  • ダブル i = 4/100d;
  • ダブル i = 4 /100d;
  • ダブル i = 4/100d;
  • ダブル i=4d / 100;
  • ダブル i=4 / 100d;
  • ダブル i=4/100d;

上記のいずれも違反にはなりません。現在書かれているように、「d」が使用されていないと、違反がスローされます。オペランドを明示的にキャストする他の方法を考慮して、追加のロジックを追加する必要があります。これを書いているときに、両方のオペランドに 'd' があると例外がスローされる可能性が高いことに気付きました。おっと。

そして最後に、StyleCop に違反を適切に表示させることができませんでした。ルールが存在しないというエラーが何度も表示され、2 番目の目を見ても解決策が見つからなかったので、ハッキングしました。エラーは、見つけようとしていたルールの名前を示しているので、ルールの名前を説明的なものとして入力し、その中に行番号を含めました。

カスタム ルールをインストールするには、MathematicalAnalyzer プロジェクトをビルドします。Visual Studio を閉じて、DLL を StyleCop インストール ディレクトリにコピーします。Visual Studio を開くと、StyleCop 設定にルールが表示されます。私が使用した記事のステップ 5 と 6 は、それを行う場所を示しています。

これは、ソリューション全体で一度に 1 つの違反しか取得しないため、表示された違反を修正し、StyleCop を再度実行して次の違反を見つける必要があります。それを回避する方法があるかもしれませんが、私はジュースを使い果たし、ここで停止しました.

楽しみ!

于 2012-12-21T17:03:29.423 に答える