2011-11-10 88 views
0

我有一個驅動器號的數組,我需要爲每個字母附加一個冒號,然後將數組傳遞給另一個函數。我可以做到這一點,還是我需要創建一個新的數組?或者可能不是一個數組,而只是某種List而已?編輯數組元素

string source = "C|D|E"; 
string[] sourcearray = source.Split('|'); 
foreach (string driveletter in sourcearray) 
{ 
    //need to append ":" to each drive letter 
} 

編輯:有些時候源陣列可以在一個管端:

string source = "C|D|E|"; 

當這種情況發生的最後一個元素陣列中的將是一個冒號如果我使用一個共同的for循環中,我不能擁有這個。如何最好地處理這個問題?發生這種情況時,最終陣列需要如下所示:

C: D: E: 

謝謝。

+0

到編輯:你可以告訴Split函數忽略空值。檢查功能過載。 – GeirGrusom

回答

3

字符串是不變的,所以你不能改變字符串實例,但你必須用新的字符串改變數組插槽:

string source = "C|D|E"; 
string[] sourcearray = source.Split(new []{'|'}, StringSplitOptions.RemoveEmptyEntries); 
for(int i=0; i < sourcearray.Length; i++) 
{ 
    sourcearray[i] = sourcearray[i] + ":"; 
} 
+0

謝謝。針對特定案例編輯該問題。 –

+0

@SixHouse:你可以使用Split的重載來跳過空的條目,檢查我的編輯。 – digEmAll

2

更換你的for循環與

string[] resultArray = sourcearray.Select(s => s + ":").ToArray(); 

重新編輯:

string source = "C|D|E|"; 

這裏最好的解決方案是,這是string.Split()方法的特殊變化。不幸的是一個需要分隔字符數組,所以我們得到:

sourceArray = source.Split(new char[] {'|'}, 
      StringSplitOptions.RemoveEmptyEntries); 
+1

這個人顯然是C#的新手,我不確定Lambda表達式是一個合適的解決方案... –

+2

@KristianFenn:這就是爲什麼他需要被告知一些關於Lambda表達式的原因。 –

1
for (var i = 0; i < sourcearray.Length; i++) 
{ 
    sourceArray[i] += ":"; 
} 
0
string[] sourcearray = source.Split('|').Select(s => s + ":").ToArray(); 
0
var newArray = source.Split('|').Select(s => s + ":").ToArray();