·隱式類型本地變量
·匿名變量
·擴展方法
·對象和Collection初始化符
·Lambda表達式
·查詢表達式
·表達式樹
隱式類型本地變量
C#
var i = ;
這一行使用了
為了保證使用var關鍵字進行聲明的變量的強類型特性
另一方面
var intArr = new[] { } ;
上面一行的代碼將聲明intArr為int[]
var關鍵字允許你使用匿名類型的實例
匿名變量
C#
new {hair= black skin= green teethCount= }
上一行代碼
class __Anonymous
{
private string _hair = black ;
private string _skin = green ;
private int _teeth = ;
public string hair {get { return _hair; } set { _hair = value; }}
public string skin {get { return _skin; } set { _skin = value; }}
public int teeth {get { return _teeth; } set { _teeth = value; }}
}
事實上
現在你擁有了這個類
var frankenstein = new {hair= black skin= green teethCount= }
擴展方法
擴展方法使你能夠使用額外的靜態方法來擴展各種類型
擴展方法只能在靜態類中被聲明
public static int ToInt (this string s)
{
return Convert ToInt (s) ;
}
如果一個包含以上方法的靜態類被使用
string s = ;
int i = s ToInt ();
這使得你可以充分享用各種以有的內建的或者定義的類型的擴展特性
對象和Collection初始化符
C#
舉例來說
public class CoOrdinate
{
public int x ;
public int y;
}
你然後可以使用一個對象初始化符來聲明和初始化一個CoOrdinate對象
var myCoOrd = new CoOrdinate{ x = y= } ;
也許你要問
var myCoOrd = new CoOrdinate( ) ;
注意
類似的
Listanimals = new List();
animals Add( monkey );
animals Add( donkey );
animals Add( cow );
animals Add( dog );
animals Add( cat );
可以縮短為
Listanimals = new List{ monkey donkey cow dog cat } ;
Lambda表達式
C#
class Program
{
delegate void DemoDelegate();
static void Main(string[] args)
{
DemoDelegate myDelegate = new DemoDelegate(SayHi);
myDelegate();
}
void SayHi()
{
Console Writeline( Hiya!! ) ;
}
}
在C#
class Program
{
delegate void DemoDelegate();
static void Main(string[] args)
{
DemoDelegate myDelegate = delegate()
{
Console Writeline( Hiya!! );
};
myDelegate();
}
}
盡管匿名方法對基於方法的委托調用更進了一步
你可以將Lambda表達式作為一個參數列表來編寫代碼
class Program
{
delegate void DemoDelegate();
static void Main(string[] args)
{
DemoDelegate myDelegate = () =>Console WriteLine( Hiya!! ) ;
myDelegate();
}
}
盡管Lambda表達式顯得更加簡潔
·它們允許參數類型是被推斷的
·它們可以支持查詢表達式或C#語句
·它們可以被看作使用表達式樹的數據
查詢表達式
這個特性使得你可以在C#中使用SQL類似風格的語句
舉例來說
ublic class CoOrdinate
{
public int x ;
public int y;
}
在C#裡
// Use Object and collection initializers
Listcoords = ;
現在你的數據可以作為一個collection來實現 IEnumerable
var filteredCoords =
from c in coords
where x ==
select (c x c y)
在以上SQL風格的格式中
每個查詢表達式實際上轉變為一個C#的調用
where x ==
將會轉換為
coords where(c =>c x == )
你可以看到
表達式樹
C#
如下是一個表達式樹的例子
Expressionfilter = () =>Console WriteLine( Hiya!! ) ;
使用如上的表達式樹的方法
結束語
C#
C#
From:http://tw.wingwit.com/Article/program/ASP/201311/21713.html