.Net 2.0コードベースを使用する場合、ReSharperは、最新のc#3.0言語機能を適用することを継続的に推奨しています。単純なプロパティを自動実装プロパティに変換するか、ローカル変数をvarとして宣言します。とりわけ。
新しい言語機能が到着したら、戻って既存のコードベース全体に忠実に適用しますか、それとも新しいコードが新しい言語機能を使用して記述された場合、コード全体で不整合が生じることを受け入れて、コードを元の状態のままにしますか?
壊れていない場合は、修正しないでください。もちろん、単体テストに自信がある場合は、試してみることができますが、「理由だけで」ランダムにコードを変更するべきではありません。
もちろん、場合によっては、コードを単純化することが変更を加える正当な理由になります。しかし、自動実装されたプロパティに切り替えるという単純なことでさえ、仮定を行い、リフレクションを使用してフィールドを直接更新するコードを壊す可能性があります。または、シリアライゼーションが壊れる可能性があります。
「var」に変更すると、実際には別の (より具体的な) タイプが得られ、別のメソッドのオーバーロードが選択される可能性があります。
もう一度言います。それは、単体テストに対するあなたの自信にかかっています。
その他の考慮事項:
これらのどちらも問題にならない場合は、新しいコードで新しい機能を使用しても問題ないはずです...古いコードで「すべて更新」を押す前に少し注意してください...
破壊的変更としての「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]
ます...
私は単にコードを維持するだけです。最終的には、アプリの大部分がクリーンアップされるか、新しい機能と改善に合わせて調整されます。それを変えるために何かを変えないでください。パフォーマンスや安定性の向上が得られない場合は、コードの更新に時間を費やす必要はありません。
C# 2 上に構築された C# 3 と、両者は完全に互換性があります。したがって、各更新を反映する必要があります。
その行 (または多くの場合、その近くの行) を変更するまでそのままにしておきます。それから私はアップグレードします。(クラスまたはファイルのいずれかを変更すると、クラスまたはファイル全体を更新することがあります)
そのままにしておきます。多くの作業が必要であるという事実に加えて、コードが本当に同じであるか、または新しい機能の副作用があるかという問題もあります。
var の特定のケースでは、コンパイラはとにかくコンパイル時に正しい型を入れるので、実際には何のメリットもありません。
編集:実際、私は var が物事を壊さないことについて間違っているので、そうです、私の元のアドバイスは有効です。壊れてなければ…