Resharperは確かにそう考えています。
Dooberry dooberry = new Dooberry();
に
var dooberry = new Dooberry();
それは本当に最高のスタイルと考えられていますか?
もちろんスタイルの問題ですが、私は Dare: C# 3.0 Implicit Type Declarations: To var or not to var?に同意します。. 明示的な型の代わりに var を使用すると、コードが読みにくくなると思います。次のコードでは:
var result = GetUserID();
結果とは?int、文字列、GUID? はい、それは問題です。いいえ、知るためにコードを掘り下げる必要はありません。コードサンプルでは特に厄介です。
Jeff はこれについて投稿を書き、var を好むと述べました。しかし、その男は狂っている !
古い CodingHorror の投稿を掘り起こし、(Jeopardy スタイルで) 質問の形で表現します。
var が何であるかが明らかな場合にのみ使用します。
私には明らかです:
XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];
私にはわかりません:
var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];
これに対する私が見た答えの最も良い要約は、エリック・リッパートのコメントです。これは、型が何であるかが重要な場合は具体的な型を使用する必要があるが、それ以外の場合は使用しないことを本質的に述べています。基本的に、型情報は、型が重要な場所のために予約する必要があります。
私の会社の標準は、どこでも var を使用することです。これは、さまざまな推奨事項を読み、注釈付きの型情報の欠如が助けになるか妨げになるかを確認するために時間をかけて試した結果です。私たちはそれが助けになると感じました。
人々がリンクしている推奨事項のほとんど (たとえば、Dare の推奨事項) は、具象型の代わりに var を使用してコーディングを試みたことがない人々による推奨事項です。これにより、推奨事項はほとんど価値がありません。経験に基づいたものではなく、推定に過ぎないからです。
私があなたにできる最善のアドバイスは、自分で試してみて、あなたとあなたのチームにとって何がうまくいくかを確認することです.
@jongalloway - var は必ずしもコードを読みにくくするわけではありません。
var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;
1 つ目は 2 つ目と同じくらい読みやすく、必要な作業は少なくなります。
var myvariable = ResultFromMethod();
ここで、ポイントがあります。var を使用すると、コードが読みにくくなる可能性があります。私は var が好きです。なぜなら、10 進数を double に変更する場合、さまざまな場所で変更する必要がないからです (リファクタリングとは言わないでください。忘れることもあります。ただ var を許可してください!)
編集:記事を読んでください、同意します。笑。
これは、今後 Stack Overflow で最もよく聞かれる質問の 1 つになると思います。それは好みに要約されます。あなたが考えるものは何でも、より読みやすいです。型が右側に定義されている場合は、簡潔なので var を好みます。メソッド呼び出しから変数を割り当てるときは、明示的な型宣言を使用します。
これについては良い議論がありました@ Coding Horror
個人的には、その使用を最小限に抑えようとしていますが、特にメソッド呼び出しから変数を割り当てるときに読みやすさが損なわれることがわかりました。
ReSharper のようなツールの利点の 1 つは、好きなようにコードを記述し、後で保守しやすいものに再フォーマットできることです。実際に使用されている型が表示されるように R# を常に再フォーマットするように設定していますが、コードを記述するときは、ほとんどの場合「var」と入力します。
優れたツールを使用すると、両方の長所を活かすことができます。
ジョン。
「ベスト スタイル」は主観的なものであり、文脈によって異なります。
非常に長いクラス名を入力する代わりに「var」を使用する方が簡単な場合や、特定の関数の戻り値の型が不明な場合があります。Linq をいじったり、for ループ宣言を行ったりするときに、「var」をより多く使用していることに気付きました。
それ以外の場合は、完全なクラス名を使用すると、「var」よりもコードが適切に文書化されるため、より役立ちます。
決めるのは開発者次第だと思います。銀の弾丸はありません。「真の方法」はありません。
乾杯!
常にではありませんが、多くの場合、私は言うまでもありません。型宣言は、ハンガリー語表記よりもはるかに便利ではありません。型が変更される可能性があるという同じ問題が依然としてあり、リファクタリングツールが役立つのと同じくらい、型が指定されている場所を変更する必要がない場合と比較して理想的ではないということです。原理。
変数とその値の両方に対して型の名前を指定できる単一行のステートメントは、特に長い場合は必ず var を使用する必要があります。Generic<OtherGeneric< T,U,V>, Dictionary< X, Y>>>
古い CodingHorror の投稿を掘り起こし、(Jeopardy スタイルで) 質問の形で表現します。
無罪を主張します!しかし、その通りです。これは比較的人気のある小さな質問のようです。
このトピックに関する非常に優れた MSDN の記事があり、var を使用できないいくつかのケースについて概説しています。
暗黙的に型指定された変数宣言には、次の制限が適用されます。
- var は、ローカル変数が同じステートメントで宣言および初期化されている場合にのみ使用できます。変数を null に初期化することも、メソッド グループまたは無名関数に初期化することもできません。
- var は、クラス スコープのフィールドでは使用できません。
- var を使用して宣言された変数は、初期化式では使用できません。つまり、次の式は正当です。 int i = (i = 20); しかし、この式はコンパイル時エラーを生成します: var i = (i = 20);
- 複数の暗黙的に型指定された変数を同じステートメントで初期化することはできません。
- var という名前の型がスコープ内にある場合、var キーワードはその型名に解決され、暗黙的に型指定されたローカル変数宣言の一部として扱われません。
コードで var を使用することの完全な意味を理解するために、チェックアウトすることをお勧めします。