我試圖做下面的事情,但它不起作用。爲什麼.NET不會讓我這樣做?爲什麼我無法將匿名類型作爲參數傳遞給函數?
private void MyFunction(var items)
{
//whatever
}
我試圖做下面的事情,但它不起作用。爲什麼.NET不會讓我這樣做?爲什麼我無法將匿名類型作爲參數傳遞給函數?
private void MyFunction(var items)
{
//whatever
}
在Visual C#3.0開始,那些在方法範圍聲明的變量可以具有隱式類型變種。一個隱式類型的局部變量是強類型的,就像你自己聲明瞭類型一樣,但是編譯器決定了類型。我的下面兩個聲明在功能上等同:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
。換句話說,var
關鍵字只適用於局部範圍的變量。
一點點更多信息here。基本上,在使用var
時,還必須將變量初始化爲同一行上的值,以便編譯器知道它是什麼類型。
我不知道動態關鍵字在這裏有什麼用處... – 2012-05-30 13:50:39
@VincentVancalbergh我認爲'動態'會提供OP之後的使用。 – Nate 2012-05-30 13:53:24
C#是一種強類型語言,匿名類型的添加並沒有改變這一點。
你當然可以通過類型對象(或對象數組)的函數的變量,
private void MyFunction(object items)
{
//Typecast to whatever you like here....But frankly this is a "code smell"
}
也許你能告訴我們你想達到什麼目的,也許有更好的設計。
嚴格地說,你可以傳遞匿名類型作爲參數,但是你不能以強類型的方式訪問它的成員。使用泛型類型參數推斷:
public static int Foo<T>(T obj)
{
return obj.GetHashCode();
}
public static void Main()
{
var anonymousType = new { Id = 2, Name = "Second" };
var value = Foo(anonymousType);
}
只是FYI,用'var'定義的變量是隱式類型的,而不是匿名的。匿名類型是完全不同的球類遊戲。 'var'可以與匿名類型一起使用,但並不意味着對象*是*匿名類型。 – Nate 2010-07-07 21:48:33