var i = 123; // int
var d = 123.123; // double
var s = "oec2003"; // string
var arr = new[] {1,2,3,4}; // int[]
var arr2 = new[] {1, 10, 100, 1000}; // int[]
編譯器根據初始值靜態推斷類型,生成 IL 與顯式聲明一致。非 JS 弱類型,非 object,純強類型推斷。
foreach (var x in list)this T 指定擴展類型
public static class StringExtensions
{
public static bool IsValidEmail(this string s)
{
var regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
return regex.IsMatch(s);
}
}
protected void Button_Click(object sender, EventArgs e)
{
if (this.TextBox1.Text.Trim().IsValidEmail())
Response.Write("email is right");
else
Response.Write("email is error");
}
智能提示自動出現 IsValidEmail,調用語法與 string 實例方法無異。
var emails = new[] {"a@b.com", "invalid", "c@d.cn"};
var valid = emails.Where(e => e.IsValidEmail()).ToList();
// emails.Where 為擴展方法,e.IsValidEmail 為擴展方法,var 推斷 List
var 消除類型聲明噪音,擴展方法賦予類型新能力。兩者結合,配合 LINQ,構成 C# 3.0 表達力躍升的鐵三角。掌握定義規範、限制邊界、組合模式,即可在項目中編寫更流暢、更具領域語義的代碼。