C# の暗黙的型指定ローカル変数 var
C# の暗黙的型指定とは?
通常 C# では、変数を宣言するときには変数の型を指定します。
次の例では、5行目で string 型の s、 6行目では int 型の i を宣言しています。
class Program
{
static void Main(string[] args)
{
string s = "Hello";
int i = 1;
Console.WriteLine($"{s} {i}");
}
}
変数 s、 i はそれぞれ "Hello"、 1 という値で初期化しています。 つまり、それぞれ string型、 int 型で初期化しています。
このことから逆に、変数 s、 i はそれぞれ string型、 int 型であるはずです。
このように、ローカル変数が 初期化する値によって変数の型がわかる場合には、変数の型として var と書くことができます。 var を用いて宣言されたローカル変数を暗黙的型指定ローカル変数といいます。
var を使うと上のコードは次のようにかけます。
class Program
{
static void Main(string[] args)
{
var s = "Hello";
var i = 1;
Console.WriteLine($"{s} {i}");
}
}
var は型の名前が長くなるほど、より便利に使えます。
例えば次の例では、変数 d1 と d2 は同様の内容の オブジェクトですが、 var を使って宣言しています。
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Dictionary<String, String> d1 = new Dictionary<String, String>();
var d2 = new Dictionary<String, String>();
}
}
従来の方法では 7 行目のように、左辺にも型を書かなければいけませんでした。var を使えば 8 行目のようにすっきりします。
この場合、 d2 の書き方の方が、コレクションの型が変わった場合などの変更にも対応しやすいでしょう。
C# の匿名型を扱うには var を使う
var があるために、自明な型を書くことを省略できるだけでなく、 匿名型のように、そもそも型に名前がない場合にも対応することができます。
匿名型については「C# の匿名型」をみてください。