2015-11-20 81 views
1

你好,這是我的代碼,我想在列表中添加字符串,但我得到這個錯誤C#中使用未分配的局部變量

使用未分配的局部變量

,這是我的代碼

List<string> tokens = new List<string>(); 
int token_number=0 ; 
char[] character = file_text.ToCharArray(); 
int i = 0; 
for (; i < character.Length; i++) 
{ 
    if (char.IsLetter(character[i])) 
    { 
     string local_token; 
     while (char.IsLetterOrDigit(character[i + 1]) || character[i + 1] == '_') 
     { 

      local_token += character[i]; 
      tokens.Add(local_token.ToString()); 
     } 

    } 
} 

你好,這是我的代碼,我想字符串添加到我的列表,以便得到這個錯誤Error 2 Use of unassigned local variable 'local_token' C:\Users\Alireza\Documents\Visual Studio 2013\Projects\tslnc\tslnc\Program.cs 46 25 tslnc

+0

當你不初始化它時,你的字符串'local_token'不是一個空字符串,而是'null'。那麼你不能使用它,'local_token + = character [i]'無論如何都會在運行時遇到'NullReferenceException'。這就是編譯器想告訴你的。你只需要分配一個像'「」'的值。 ' –

+0

除了下面的答案外,還要注意,你應該把'local_token'加到'while'循環外的'tokens'。 –

+1

這不值得使用'StringBuilder'而不是使用'+'追加嗎? – Chawin

回答

3

聲明變量:

string local_token; 

然後你嘗試引用它的值:

local_token += character[i]; 

但你從來沒有給了它的價值。這是null。這是未分配

只需使用一個默認值聲明它:

string local_token = string.Empty; 
4

您的local_token聲明改成這樣:

string local_token = ""; 

如果不指定它未初始化字符串(未分配)的值。

+1

有點解釋會很棒 –

0

你並初始化使用前變量...

string local_token=string.Empty; 
0

爲了擴大在別人的答案,而不是使用stringlocal_token你可以使用一個Stringbuilder

在一個循環中,一個Stringbuilder會快得多,並使用更少的內存比使用附加到一個string+(「How to improve string concatenation performance in Visual C#」)。

要實現Stringbuilder

StringBuilder local_token = new Stringbuilder(); 
    while (char.IsLetterOrDigit(character[i + 1]) || character[i + 1] == '_') 
    { 
     local_token.Append(character[i]); 
     tokens.Add(local_token.ToString()); 
     local_token.Clear(); 
    } 
1

我分享很簡單的一個襯墊的答案: -

You are only generating new instance, but you didn't assigned with any value, So you are getting run time error. 

串local_token;

local_token =的String.Empty;

現在只需加2號線也在你的代碼。希望這篇文章能夠提供更多幫助:)。

相關問題