Resharper がほとんどの変数をコード内の実際の型ではなく var 型に変更することを望むのはなぜですか?
8 に答える
それは単なるオプションです。無効にすることができます:
ReSharper -> オプション -> コード・インスペクション -> インスペクションの重大度 -> コードの冗長性 -> 可能であれば「var」キーワードを使用: これを「表示しない」に変更します
各方向に移動するコンテキスト (電球) オプションもあります。これは、ReSharper -> オプション -> 言語 -> C# -> コンテキスト アクション -> 「明示的な型宣言を 'var' に置き換えます」の下にあります。
Hadi Hariri が Resharper 6.x を紹介しているビデオを見ました。彼の推論は、ユーザーに「var」の使用を強制している場合、実際にはより意味のある方法で変数に名前を付けることをユーザーに強制しているということです。そうすれば、すべての名前が読みやすく、より意味のあるものになります。
デフォルトでは、このタイプの宣言は「緑色の波線」になります。
Person p = new Person();
^^^^^^
繰り返しのため。
推測できる場合は、(小さな緑色のアンダースコア) var も提案されます。
Person p = repository.GetPerson(1);
¯¯¯
この場合、GetPerson メソッドの戻り値の型から推測できます。
Jon Skeet が述べたように、resharper のオプションでこれらの提案を無効にすることができます。
あなたの質問に答えるために... JetBrainsの誰かがそれが「好ましい」方法であると判断したからです。
それを変更するには、ジョンの答えに従ってください。さらに、ReSharper オプションのコード クリーンアップ セクションで、コード クリーンアップ (私がよく使用する) を実行するときの ReSharper の動作を変更することもできます。「明示的なタイプを使用する」に設定します。
これは、JetBrains コード検査 wiki に関する説明です: http://confluence.jetbrains.net/display/ReSharper/Use+%27var%27+keyword+when+initializer+explicitly+declares+type
クラスが右側に表示されている場合は、左側にも表示する必要はほとんどありません。また、クラス名が非常に長い場合は、スペースを節約し、コードを削減します。個人的には、string や int などの単純な型には var を使用しませんが、var dictionary = new Dictionary<string, int>()
スペースを節約するために使用します。
両方の方法を示唆していると思います。明示的な型がある場合は、それを var に変更できます。var がある場合は、それを明示的に変更できます。もちろん、それが適切であると思われる場合は、変更をより迅速に行うためです。
たとえば、コレクションを反復するときなど、型が「暗黙的」である場合 (もちろん、Resharper が提案する場合、コンパイラーにとっては常に暗黙的です) およびその不在の場合は、ループ変数に vars を使用することをお勧めします。コードの可読性が低下することはありません。また、ジェネリックで非常に長くなる可能性があるいくつかの宣言を短くするのが好きです。IList(IDictionary(SomeType)) myVar = List(IDictionary(SomeType)) () のように、代入の左側に「var」と書いておけば、それほど緩みません。
(括弧を山かっこに置き換えます;)
もちろん、読みやすさを向上させるために vars を慎重に使用するようにしますが、その逆ではありません。
私にとって、それは間違いなく価格の価値があります...(たとえ自分で支払わなければならなかったとしても)。ただし、VSが遅くなる可能性があります。5000 行のコードなどのファイルがあると、非常に遅くなる可能性があります。
しかし、私がまだ得ていないのは、チームでそれを使用しているのはなぜ私だけなのかということです...
Vars は、特にジェネリックを使用する場合に、メソッド内でコードを読みやすくするのに役立ちます。
ジョンが言うように、それは単なるオプションです。