2009-02-25 40 views
2

我有,如果爲什麼if語句中的字符串初始化會阻止我打印?

{ 
    string nom; 
    string ou; 
    nom = "1"; 
    if (nom == "1") 
    { 
     nom +=1; 
     ou = nom; 
    } 
    Console.Write(ou); 
} 

小問題,但我不能打印OU值我不知道爲什麼

+1

不是在我看來,一個能說會道的問題。代碼很奇怪,沒有解釋 - 爲什麼字符串中的「x + = 1」? – dbkk 2009-06-23 13:45:29

回答

1

另一種選擇是設置OU在其他:

if (nom == "1") 
{ 
    nom +=1; 
    ou = nom; 
} else 
{ 
    ou = "blank value"; 
} 
7

C#編譯器要求在使用前一定初始化的變量。

定義初始化是編譯時的事情,它不考慮變量的運行時值。

但是,如果變量nom被明確definied爲const,編譯器會確保它不會在運行時更改和if語句塊將運行和可變ou將被明確指定。

11

嘗試這樣的事情

{ 
    string nom; 
    string ou = String.Empty; 
    nom = "1"; 
    if (nom == "1") 
    { 
     nom +=1; 
     ou = nom; 
    } 
    Console.Write(ou); 
} 
3

這是因爲OU是未分配的,如果塊的範圍之外。將聲明行更改爲string ou = string.Empty;,並將其工作。

3

這段代碼甚至不會編譯,更不用說打印ou。 C#強制所有變量在訪問之前進行初始化,在您的情況中並非總是如此。從而改變

string ou; 

來,說:

string ou = ""; 

會做得很好。

+0

對於誰低估了這一點:你完全同意嗎? – 2009-02-25 13:53:31

+0

我沒有downvote它,但我的問題是=「」,它應該是= String.Empty主要是爲了可讀性的原因。 – Alex 2009-05-04 19:54:48

5

嘗試用

string ou = null; 

問題代替第二線是,如果NOM證明不是等於「1」,則變量OU不會已被初始化。這裏的編譯器想要保證你已經分配了一個值。

6

這是甚至編譯?

nomstring - 你怎麼辦nom += 1

相關問題