C# 3.0 では、*常に* 暗黙的に型指定されたローカル変数を優先する必要がありますか?

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

質問

リシャーパー 確かにそう思っているし、そのままでは変換するようにしつこいでしょう。

Dooberry dooberry = new Dooberry();

var dooberry = new Dooberry();

本当にそれがベストなスタイルと言えるのでしょうか?

役に立ちましたか?

解決

もちろんスタイルの問題ですが、私は Dare の意見に同意します。 C# 3.0 の暗黙的な型宣言:var するかしないか?. 。明示的な型の代わりに var を使用すると、コードが読みにくくなると思います。次のコードでは:

var result = GetUserID();

結果とは何ですか?int、文字列、GUID?はい、それは重要ですが、いいえ、知るためにコードを詳しく調べる必要はありません。コードサンプルでは特に厄介です。

ジェフはこれについて次のように投稿しました。 彼はヴァールを支持する. 。でもあの人は頭がおかしい!

スタックオーバーフローが成功するパターンが見えています。古いコーディングホラー投稿を掘り出し、(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 の方が好きです。メソッド呼び出しから変数を割り当てるときは、明示的な型宣言を使用します。

この@については良い議論がありました コーディングホラー

個人的にはその使用を最小限に抑えるようにしていますが、特にメソッド呼び出しから変数を割り当てるときに可読性が損なわれることがわかりました。

ReSharper のようなツールの利点の 1 つは、好きなようにコードを記述し、後でより保守しやすいものに再フォーマットできることです。私は、使用中の実際の型が表示されるように常に再フォーマットするように R# を設定していますが、コードを記述するときは、ほぼ常に「var」と入力します。

優れたツールを使用すると、両方の長所を活用できます。

ジョン。

事前にタイプが分からない場合にのみ意味を持ちます。

「最適なスタイル」は主観的なものであり、状況によって異なります。

場合によっては、非常に長いクラス名を入力するよりも 'var' を使用する方が簡単な場合や、特定の関数の戻り値の型がわからない場合があります。Linq をいじったり、for ループの宣言をしたりするときに、「var」をよく使用することがわかりました。

また、「var」を使用するよりも完全なクラス名を使用した方が、コードをより適切に文書化できるため便利な場合もあります。

開発者が決めることだと思います。特効薬はありません。「唯一の真の方法」はありません。

乾杯!

いいえ、そうではありません いつも しかし、私は多くの場合、そうまで言います。型宣言は、これまでのハンガリアン表記法ほど便利ではありません。型は変更される可能性があるという同じ問題が依然としてあり、リファクタリング ツールは役に立ちますが、単一の場所を除いて型が指定されている場所を変更する必要がないことに比べて理想的ではありません。原理。

変数とその値の両方に型の名前を指定できる 1 行のステートメントでは、特に長い Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>> の場合は必ず var を使用する必要があります。

あります 本当に良いMSDN記事 このトピックでは、var を使用できないいくつかのケースについて概説します。

暗黙的に型指定された変数宣言には、次の制限が適用されます。

  • VARは、ローカル変数が宣言され、同じステートメントで初期化された場合にのみ使用できます。変数は、null、またはメソッドグループまたは匿名関数に初期化することはできません。
  • var はクラス スコープのフィールドでは使用できません。
  • VARを使用して宣言された変数は、初期化式では使用できません。言い換えれば、この表現は合法です。int i = (i = 20);ただし、この式はコンパイル時間エラーを生成します。var i = (i = 20);
  • 同じステートメントでは、複数の暗黙的な型変数を初期化することはできません。
  • VARという名前のタイプがスコープにある場合、VARキーワードはそのタイプ名に解決され、暗黙的に型と型付けされたローカル変数宣言の一部として扱われません。

コード内で var を使用することの完全な影響を理解するために、これを確認することをお勧めします。

Stackoverflowの成功のパターンがあります:古いCodinghorrorの投稿を掘り下げ、(Jeopardyスタイル)質問の観点からフレーズします。

無実を訴えます!しかし、おっしゃるとおり、これは比較的人気のある小さな質問のようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top