1

.Net 2.0コードベースを使用する場合、ReSharperは、最新のc#3.0言語機能を適用することを継続的に推奨しています。単純なプロパティを自動実装プロパティに変換するか、ローカル変数をvarとして宣言します。とりわけ。

新しい言語機能が到着したら、戻って既存のコードベース全体に忠実に適用しますか、それとも新しいコードが新しい言語機能を使用して記述された場合、コード全体で不整合が生じることを受け入れて、コードを元の状態のままにしますか?

4

4 に答える 4

5

壊れていない場合は、修正しないでください。もちろん、単体テストに自信がある場合は、試してみることができますが、「理由だけで」ランダムにコードを変更するべきではありません。

もちろん、場合によっては、コードを単純化することが変更を加える正当な理由になります。しかし、自動実装されたプロパティに切り替えるという単純なことでさえ、仮定を行い、リフレクションを使用してフィールドを直接更新するコードを壊す可能性があります。または、シリアライゼーションが壊れる可能性があります。

「var」に変更すると、実際には別の (より具体的な) タイプが得られ、別のメソッドのオーバーロードが選択される可能性があります。

もう一度言います。それは、単体テストに対するあなたの自信にかかっています。

その他の考慮事項:

  • チームの他のメンバーは新しい構文をまだ理解していますか?
  • プロジェクトは C# 2.0 をサポートする必要がありますか (たとえば、一部のオープン ソース プロジェクトでは、C# 2.0 との互換性を維持したい場合があります)。

これらのどちらも問題にならない場合は、新しいコードで新しい機能を使用しても問題ないはずです...古いコードで「すべて更新」を押す前に少し注意してください...

破壊的変更としての「var」の簡単な例を次に示します。

    static void Main() {
        using (TextReader reader = File.OpenText("foo.bar")) { // [HERE]
            Write(reader);
        }
    }
    static void Write(TextReader reader) {
        Console.Write(reader.ReadToEnd());
    }
    static void Write(StreamReader reader) {
        throw new NotImplementedException();
    }

var reader次に、マークされた行に切り替え[HERE]ます...

于 2008-11-03T14:20:47.117 に答える
2

私は単にコードを維持するだけです。最終的には、アプリの大部分がクリーンアップされるか、新しい機能と改善に合わせて調整されます。それを変えるために何かを変えないでください。パフォーマンスや安定性の向上が得られない場合は、コードの更新に時間を費やす必要はありません。

C# 2 上に構築された C# 3 と、両者は完全に互換性があります。したがって、各更新を反映する必要があります。

于 2008-11-03T14:22:01.357 に答える
1

その行 (または多くの場合、その近くの行) を変更するまでそのままにしておきます。それから私はアップグレードします。(クラスまたはファイルのいずれかを変更すると、クラスまたはファイル全体を更新することがあります)

于 2008-11-03T14:22:17.940 に答える
0

そのままにしておきます。多くの作業が必要であるという事実に加えて、コードが本当に同じであるか、または新しい機能の副作用があるかという問題もあります。

var の特定のケースでは、コンパイラはとにかくコンパイル時に正しい型を入れるので、実際には何のメリットもありません。

編集:実際、私は var が物事を壊さないことについて間違っているので、そうです、私の元のアドバイスは有効です。壊れてなければ…

于 2008-11-03T14:23:28.513 に答える