2011-08-23 79 views
0

我正在處理一個文件解析器,並且這段代碼沒有給我我想要的東西。在我走得更遠之前,我應該提到我沒有寫這個程序,我只是編輯源代碼來解決這個特定的問題。另外,我可以編譯代碼,所以這不是問題(你知道下載的程序總是有編譯錯誤)。這是代碼。現在如何獲取System.String對象的值而不是返回「System.String []」

case EsfValueType.Binary4E: //System.String[] 
{ 
    int size = (int)(this.reader.ReadUInt32() - ((uint)this.reader.BaseStream.Position)); 
    var strings = new string[size/4]; 
    for (int i = 0; i < size/4; i++) 
     strings[i] = this.stringValuesUTF16[this.reader.ReadUInt32()]; 
    esfValue.Value = strings.ToString(); 
    break; 
} 

,我加入了.ToString();部分上面的線,但它並沒有區別。問題是esfValue.Value以System.String[]作爲值,因此我需要System.String對象的值。如果你能從中瞭解並告訴我什麼是錯誤的,那將是值得讚賞的。

程序名稱爲ESF Editor 1.4.8.0。

+2

你說「System.String對象的值」 - 哪一個?它們有'size/4'。從根本上說,你正在閱讀幾個字符串 - 我們不知道你是否想要一個包含所有數據的字符串(以某種方式分開?只是混合在一起?)或者只是其中一個值... –

+0

您可能想要考慮重寫使用'StringBuilder' –

+0

@Rowland:在我們知道最終結果是什麼之前,我看不到'StringBuilder'如何提供幫助。 –

回答

4
case EsfValueType.Binary4E: //System.String[] 
{ 
    int size = (int)(this.reader.ReadUInt32() - ((uint)this.reader.BaseStream.Position)); 
    var strings = new StringBuilder(); 
    for (int i = 0; i < size/4; i++) 
    { 
     strings.Append(this.stringValuesUTF16[this.reader.ReadUInt32()]); //or AppendLine, depending on what you need 
    } 
    esfValue.Value = strings.ToString(); 
    break; 
} 
+0

這給了我一個空白的領域。我將最後一行更改爲...''test「+ size.ToString()+ strings.ToString();'它給了我」test0「。 –

+0

好吧,看起來像完美的作品。我得到上述的原因是因爲我在一個空白的領域。謝謝 –

0

strings變量是一個字符串數組 - Array類不覆蓋默認的ToString()實現,該實現返回對象的類型。

您需要連接數組中的所有字符串 - 循環和連接或使用LINQ,並將結果字符串分配到esfValue.Value。當然,這假定你想要所有的值都在一個字符串中,一個接一個地。

1

你的問題是,strings不是一個字符串,它是一個字符串數組。因此,您撥打ToString的電話是Object.ToString(),它返回對象的類型。

也許你想要的東西,像

esfValue.Value = strings.Aggregate((acc, next) => acc + next) 

這將簡單地串接所有串在一起。

+0

這會做這項工作,但使用'StringBuilder'是一種更有效的方法。 –

+0

正確,已爲您的答案+1。可能值得解釋爲什麼他的方法不起作用。 –

+0

哪個類是聚合的? –

0

試試這個

esfValue.Value = string.Join("", strings); 
0

我想你只需要加入包含字符串數組中的字符串值。爲此,您需要調用String.Join並傳遞字符串分隔符和字符串數組。它返回一個單一的System.String。

0

當您對不覆蓋返回自定義字符串(其中string[]沒有)的.ToString()基方法的類執行.ToString()時,您總是會獲取該類型的名稱空間/ class作爲結果。

數組本身並沒有價值。你想要獲得什麼價值?你是否試圖將數組加入單個字符分隔的字符串?如果是這樣,這會工作:

esfValue.Value = string.Join(",", strings); 

只需更換,與要界定與陣列的任何性質。

相關問題