在C#中,變量必須使用數(shù)據(jù)類(lèi)型聲明。這些稱(chēng)為顯式類(lèi)型變量。
int i = 100;// 顯式變量
C#3.0引入了var關(guān)鍵字來(lái)聲明方法級(jí)變量,而無(wú)需顯式指定數(shù)據(jù)類(lèi)型。
var j = 100; // 隱式類(lèi)型的局部變量
編譯器將從=運(yùn)算符右側(cè)的表達(dá)式中推斷出變量的類(lèi)型。上面,var將編譯為int。
以下從表達(dá)式推斷類(lèi)型。
int i = 10; var j = i + 1; // 編譯為int
var可用于聲明任何內(nèi)置數(shù)據(jù)類(lèi)型,用戶(hù)定義類(lèi)型或匿名類(lèi)型變量。下面的示例顯示C#編譯器根據(jù)該值推斷類(lèi)型:
static void Main(string[] args)
{
var i = 10;
Console.WriteLine("Type of i is {0}", i.GetType());
var str = "Hello World!!";
Console.WriteLine("Type of str is {0}", str.GetType());
var dbl = 100.50d;
Console.WriteLine("Type of dbl is {0}", dbl.GetType());
var isValid = true;
Console.WriteLine("Type of isValid is {0}", isValid.GetType());
var ano = new { name = "Steve" };
Console.WriteLine("Type of ano is {0}", ano.GetType());
var arr = new[] { 1, 10, 20, 30 };
Console.WriteLine("Type of arr is {0}", arr.GetType());
var file = new FileInfo("MyFile");
Console.WriteLine("Type of file is {0}", file.GetType());
}隱式類(lèi)型的變量必須在聲明時(shí)進(jìn)行初始化;否則,C#編譯器會(huì)給出錯(cuò)誤:必須初始化隱式類(lèi)型的變量。
var i; // 編譯時(shí)錯(cuò)誤:必須初始化隱式類(lèi)型的變量 i = 100;
var不允許在單個(gè)語(yǔ)句中多次聲明變量。
var i = 100, j = 200, k = 300; // 錯(cuò)誤:無(wú)法在單個(gè)語(yǔ)句中聲明var變量//以下內(nèi)容也有效var i = 100; var j = 200; var k = 300;
var 不能用于函數(shù)參數(shù)。
void Display(var param) //編譯時(shí)錯(cuò)誤
{
Console.Write(param);
}var 可以在for和foreach循環(huán)中使用。
for(var i = 0; i < 10; i++)
{ Console.WriteLine(i);
}var 也可以與LINQ查詢(xún)一起使用。
// 字符串集合
IList<string> stringList = new List<string>() {
"C# Tutorials",
"VB.NET Tutorials",
"Learn C++",
"MVC Tutorials" ,
"Java"
};
// LINQ查詢(xún)語(yǔ)法
var result = from s in stringList
where s.Contains("Tutorials")
select s;