2

c#では、値を返すときに変数の型を指定する必要はありません。例えば:

foreach(var variable in variables) {
}

今日は小さなソリューションですが、大きくなる企業ソフトウェアを構築しています。この言語機能は、アプリケーションで何度も使用するとパフォーマンスが低下する可能性がありますか?

この機能がどのように呼ばれるのかわかりません。それについてもっと知りたいのですが、どのように呼ばれるのですか?

4

3 に答える 3

13

var変数に使用されimplicitly typingます。

コンパイル時に発生します。パフォーマンスの問題はありません。

例:

var i = 12; // This will be compiled as an integer
var s = "Implicitly typed!"; // This will be compiled as a string
var l = new List<string>(); // This will be compiled as a List of strings
于 2013-01-27T10:38:54.863 に答える
5

Varですimplicit type。これは、C#プログラミング言語の任意のタイプをエイリアスします。エイリアスタイプは、C#コンパイラによって決定されます。これにはパフォーマンス上のペナルティはありません。キーワードのvarパフォーマンスは同等です。実行時の動作には影響しません。

var i = 5; // i is compiled as an int
var i = "5" ; // i is compiled as a string 
var i = new[] { 0, 1, 2 }; // i is compiled as an int[] 
var i = new[] { "0", "1", "2" }; // i is compiled as an string[] 
var i = new { Name = "Soner", Age = 24 }; // i is compiled as an anonymous type 
var i = new List<int>(); // i is compiled as List<int>

varキーワードにはいくつかの制限もあります。varにを割り当てることはできませんnullまた、メソッドのパラメーター型または戻り値varとして使用することもできません。

からチェックアウトしMSDNます。

于 2013-01-27T10:40:46.553 に答える
2

前述のようvarimplicit type、コンパイラはcompile-timeどのタイプであるかを判断しvarます。パフォーマンスの問題はありません。いくつかのテストコードを記述し、コンパイルして、ildasm.exe生成されたものをチェックするために使用できますCIL

MSDN-アセンブリの内容を表示する


注:int宣言は、ILのvar宣言と同じです。したがって、実行エンジンは、varを使用したことを認識しません。

そして:それらは同じILにコンパイルされます。varキーワードは、intやstringなどの明示的な型と同じくらい高速です。

var [C#]を使用した中間言語メソッド

> public int ReturnValue() {
>     var a = 5;
>     int b = 5;
> 
>     return a + b; }

メソッドのIL

.method public hidebysig instance int32  ReturnValue() cil managed
{
  // Code size       9 (0x9)
  .maxstack  1
  .locals init ([0] int32 result,
       [1] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldc.i4.5
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  stloc.1
  IL_0005:  br.s       IL_0007
  IL_0007:  ldloc.1
  IL_0008:  ret
} // end of method VarKW::ReturnValue
于 2013-01-27T10:52:29.050 に答える