我們可以在函數中使用兩次var。 e.g我們可以在這種情況下使用'var'
var varname= sometype;
if(true)
{
varname= type1;
}
else
{
varname=type2;
}
如果這是不可能的,我會說這是變種的限制。
我們可以在函數中使用兩次var。 e.g我們可以在這種情況下使用'var'
var varname= sometype;
if(true)
{
varname= type1;
}
else
{
varname=type2;
}
如果這是不可能的,我會說這是變種的限制。
那麼這只是使用var
本身一次 - 但只要你有一個表達式來初始化它,沒關係。 (type1
和type2
將需要轉換爲的sometype
類型雖然)。
什麼你不能做到這一點:
var x; // No initialization expression
if (condition)
{
x = firstExpression;
}
else
{
x = secondExpression;
}
有有是初始化表達式(其不能是匿名函數或null文字)。如果你想這樣的事情,你可能會使用條件運算符:
var x = condition ? firstExpression : secondExpression;
是的,你可以在這種情況下使用var
,但只有sometype
是同一類型type1
和type2
的。
如果type1
和type2
其實都是不同的類型,你仍然可以使用var
當且僅當sometype
既type1
和type2
的超類。
如果在編譯時不知道type1
和type2
是什麼,則需要使用dynamic
而不是var
。如果您知道type1
和type2
都實現相同的接口,請在聲明中使用接口而不是var
。
在線分配將定義var
的類型;如果type1
和type2
與sometype
兼容,則可以工作,但第一項任務毫無意義。如果它是一個ref類型,你也許可以投一個null
;這基本上是一個無操作:
var varname= (sometype)null;
但到那個時候,你還不如干脆不使用分配:
sometype varname;
可以說是一個更好的佈局將是
var name = condition ? expr1 : expr2;
注如果沒有明顯的相同類型(可能它們是共同基類型的不同子類),則可能需要幫助它決定:
var name = condition ? (Foo)expr1 : expr2;
如果類型不相關,則不適合使用var
;你可能會發現object
或dynamic
更合適。
這是不可能的。 var
是類型安全的,意味着它的類型將從作業中推斷出來。所以在你的例子中,var
是sometype類型。爲其分配不同的類型將是不可能的(只要它們之間沒有可能的轉換)。
使用object
而不是var
可以在這種情況下工作。
你的例子很混亂。您不要將類型分配給變量,而是分配值。如果你說var varname=3;
那麼varname
是int
。然後,您只能將整數(和轉換爲整數的值)分配給它,就像您已經說過int varname=3;
- 沒有區別。
只要你有初始化語法,這是可能的。此外,最好使用var作爲參考類型和值類型的類型
C#中的var類型需要對類型進行初始化。該類型在編譯時確定並執行。當編譯器確定類型會變化時,它會給它一個匿名類型(請參閱http://msdn.microsoft.com/en-us/library/bb397696.aspx)。
匿名類型只能轉換爲對象類型。所以簡短的答案是否定的,你不能使用var來引用多個類型。即使是可以包含各種類型的對象本身也是一種類型,並且這種類型不能改變爲另一種類型。從這個意義上說,var關鍵字可以讓你變得靈活,但仍然是強類型。
如果您有各種類型的項目數組,編譯器將實現anon類型到var,它本質上充當對象。一個體面的解釋可以在:http://msdn.microsoft.com/en-us/library/bb384061.aspx找到。
您還沒有使用var關鍵字兩次。 – 2011-03-18 12:19:23