2011-03-18 112 views
0

我們可以在函數中使用兩次var。 e.g我們可以在這種情況下使用'var'

var varname= sometype; 
if(true) 
{ 
    varname= type1; 
} 
else 
{ 
    varname=type2; 
} 

如果這是不可能的,我會說這是變種的限制。

+7

您還沒有使用var關鍵字兩次。 – 2011-03-18 12:19:23

回答

7

那麼這只是使用var本身一次 - 但只要你有一個表達式來初始化它,沒關係。 (type1type2將需要轉換爲的sometype類型雖然)。

什麼你不能做到這一點:

var x; // No initialization expression 
if (condition) 
{ 
    x = firstExpression; 
} 
else 
{ 
    x = secondExpression; 
} 

是初始化表達式(其不能是匿名函數或null文字)。如果你想這樣的事情,你可能會使用條件運算符:

var x = condition ? firstExpression : secondExpression; 
1

是的,你可以在這種情況下使用var,但只有sometype是同一類型type1type2的。

如果type1type2其實都是不同的類型,你仍然可以使用var當且僅當sometypetype1type2的超類。

如果在編譯時不知道type1type2是什麼,則需要使用dynamic而不是var。如果您知道type1type2都實現相同的接口,請在聲明中使用接口而不是var

1

在線分配將定義var的類型;如果type1type2sometype兼容,則可以工作,但第一項任務毫無意義。如果它是一個ref類型,你也許可以投一個null;這基本上是一個無操作:

var varname= (sometype)null; 

但到那個時候,你還不如干脆不使用分配:

sometype varname; 

可以說是一個更好的佈局將是

var name = condition ? expr1 : expr2; 

注如果沒有明顯的相同類型(可能它們是共同基類型的不同子類),則可能需要幫助它決定:

var name = condition ? (Foo)expr1 : expr2; 

如果類型不相關,則不適合使用var;你可能會發現objectdynamic更合適。

0

這是不可能的。 var是類型安全的,意味着它的類型將從作業中推斷出來。所以在你的例子中,var是sometype類型。爲其分配不同的類型將是不可能的(只要它們之間沒有可能的轉換)。

使用object而不是var可以在這種情況下工作。

1

你的例子很混亂。您不要將類型分配給變量,而是分配值。如果你說var varname=3;那麼varnameint。然後,您只能將整數(和轉換爲整數的值)分配給它,就像您已經說過int varname=3; - 沒有區別。

0

只要你有初始化語法,這是可能的。此外,最好使用var作爲參考類型和值類型的類型

0

C#中的var類型需要對類型進行初始化。該類型在編譯時確定並執行。當編譯器確定類型會變化時,它會給它一個匿名類型(請參閱http://msdn.microsoft.com/en-us/library/bb397696.aspx)。

匿名類型只能轉換爲對象類型。所以簡短的答案是否定的,你不能使用var來引用多個類型。即使是可以包含各種類型的對象本身也是一種類型,並且這種類型不能改變爲另一種類型。從這個意義上說,var關鍵字可以讓你變得靈活,但仍然是強類型。

如果您有各種類型的項目數組,編譯器將實現anon類型到var,它本質上充當對象。一個體面的解釋可以在:http://msdn.microsoft.com/en-us/library/bb384061.aspx找到。

相關問題