2

重複の可能性:
C# での var キーワードの使用 var キーワード
のポイントは何ですか?

ここで、明示的な型付けよりも暗黙的な型付けを使用することに少し混乱しています。

MSDN の C# コーディング標準で引用されているとおり:

割り当ての右側から変数の型が明らかな場合、または正確な型が重要でない場合は、ローカル変数に暗黙的な型指定を使用します。

私の質問は、基になる変数の型が既にわかっているのに、なぜここで暗黙の型付けを使用する必要があるのでしょうか?

利点は何ですか?

私の疑問を明確にするのを手伝ってください。

4

6 に答える 6

5

take this as an example:

var q = from c in myCollection
        select new
    { c.Value1, c.Value2 };

we can't determine the datatype of q here because it's generated at run time "anonymus-type"
and that is the main purpose of it

于 2012-10-09T07:11:50.570 に答える
3

これを見てください:

Collection<KeyValuePair<Predicate<T>, Action<T>>> x = 
new Collection<KeyValuePair<Predicate<T>, Action<T>>>();

そして今これを見てください:

var x = new Collection<KeyValuePair<Predicate<T>, Action<T>>>();

そして、私はあえて、私はあなたを二重にあえて、varキーワードを使用することに利点がないことを私に伝えます。

注:これは、私が言及しないいくつかのプロジェクトでの実際の宣言に基づいています。

キーワードを使用することにはいくつかの欠点があると思う可能性がありますvarが、それらはすべてコンパイル時に発生します。実行可能ファイルはいつものように優れています。そうです、、、、varと同じではありobjectませdynamicvariant!代わりに、割り当てているもののタイプで変数を宣言するようにコンパイラーに指示します。

例えば:

var x = 1;
x  = "something"; //Error!!!

わかりました、それはばかげているように聞こえるかもしれません。「私はタイプを知っています」-あなたが言う-「なぜ私はそれを置くことができないのですか?」-あなたは尋ねます-「見て、それは簡単です:」

int x = 1;

さて、3つの理由:

  • Starが言及しているように、タイプがわからない場合があります。
  • タイプを入力したくない場合があります(ヒント:この回答の冒頭を見てください)。
  • タイプを指定する必要がない柔軟性が必要な場合があります。

この最後のポイントは、テキスト変換テンプレートまたはコードスニペットを作成するときに特に役立ちますが、日常のコピーアンドペーストにも役立ちます。

それでも、難解なメソッドのリターンタイプを変更したかどうかを考えてみてください...次のように言ってください。

List<string> MamboJambo()
{
    //...
}

そして今、あなたはそれを次のように変更しました:

IList<string> MamboJambo()
{
    //...
}

大野!今すぐ50クラスを更新する必要があります。何を待つ?いいえ、しません!常に使用するという推奨事項に従っているためですvar

注:わかりました。現実的な例ではありませんが、それでも要点はわかります。

于 2012-10-09T07:34:02.367 に答える
3

基になる変数型がすでにわかっているのに、なぜここで暗黙的な型付けを使用する必要があるのでしょうか。利点は何でしょうか?

必要に応じて、コーディングの利便性、高速タイピングのためだけに加えて、行が短くなります。

最後に、その場合、タイプは割り当ての右側に表示されます。

于 2012-10-09T07:07:12.107 に答える
0

暗黙的に型指定された変数を宣言します。つまり、コンパイル時に型が自動的に決定されるため、型を入力する必要はありません。その主な目的は、たとえば匿名メソッドを割り当てたい変数を宣言することです。基本的に、入力を減らすだけで、それ以上は入力できません。また、コード リーダーの観点からも、可能な場合は正確なタイプを指定する方がはるかに優れています。

于 2012-10-09T07:05:17.553 に答える