c#では、値を返すときに変数の型を指定する必要はありません。例えば:
foreach(var variable in variables) {
}
今日は小さなソリューションですが、大きくなる企業ソフトウェアを構築しています。この言語機能は、アプリケーションで何度も使用するとパフォーマンスが低下する可能性がありますか?
この機能がどのように呼ばれるのかわかりません。それについてもっと知りたいのですが、どのように呼ばれるのですか?
var
変数に使用されimplicitly typing
ます。
コンパイル時に発生します。パフォーマンスの問題はありません。
var
例:
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
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
ます。
前述のようvar
にimplicit type
、コンパイラはcompile-time
どのタイプであるかを判断しvar
ます。パフォーマンスの問題はありません。いくつかのテストコードを記述し、コンパイルして、ildasm.exe
生成されたものをチェックするために使用できますCIL
注: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