2013-10-17 18 views
3

object listC#對象列表,以字符串列表

我有List<object>以上看來,我想將其轉換爲List<string>

我該如何轉換它?

我需要List<string>有6個項目(11:00,13:45,...等)

+1

你沒有一個'清單'你有一個'對象[]'大小的6 –

+0

@ScottChamberlain,真實的,但大部分的解決方案,下面應該仍然工作。數組有IEnumerable。 – gunr2171

+0

座位是列表,並且第一個座位索引是對象[]。我需要這些物品。 –

回答

14
var mylist = myObjectList.ConvertAll(x => x.ToString()); 

編輯

var mylist = myObjectList.ConvertAll(x => Convert.ToString(x)); 

感謝斯科特·張伯倫

要獲得對象

var mylist = (myObjectList.First() as object[]).ToList() 
       .ConvertAll(x=>Convert.ToString(x)); 

的第一陣列添加休息到列表中。

mylist.AddRange(mylist.GetRange(1,myObjectList.Count-2).ConvertAll(x=>Convert.ToString(x))); 
+2

呵呵,我從來不知道'ConvertAll'。但是你應該使用'Convert.ToString(x)',因爲這將檢查類是否支持['IConvertable'](http://msdn.microsoft.com/en-us/library/system.iconvertible.aspx),如果不是那麼它回落到'.ToString()' –

+0

就是這樣!有用 !!感謝您的關注。 –

+0

很高興幫助 – Alyafey

2

您可以使用LINQ可簡單地把它。

myObjectList.Cast<string>(); 

或過濾所有非字符串

myObjectList.OfType<string>(); 
+0

沒有這樣的方法'TypeOf' –

+0

你是對的它的OfType <> –

+0

我會小心'OfType'。它實際上充當了尋找給定類型的對象的'where'語句,並且除去了那些不是的對象。如果由於某些(愚蠢的)原因,你的列表中有兩種以上的類型,或者你的類型不是以字符串開頭的,它會選擇較少的。 – gunr2171

5
var stringList = yourObjectList.OfType<string>().ToList(); 

記住添加的命名空間System.Linq;

需要的OfType到數組轉換爲array<T>這是必要的,以便與LINQ一起使用

+0

無法投射'System.Object []'類型的對象來鍵入'System.String' –

+0

你可能有一個數組作爲你的一個條目嗎? – TGH

+0

@MelihMucuk,你有什麼'yourObjectList'?它應該是'seanceInfo.theatre [i] .seances [0]'。 – gunr2171

-3

像這樣的模型:

var list = (List<String>) listObjects. 
+5

好吧,我打電話給你的虛張聲勢。這不會編譯。 – gunr2171

+0

在發佈它作爲答案之前,嘗試使用這樣的代碼通常是一個好主意。 –

2

試試這個

List<string> stringlist = objectList.Cast<string>() 
            .ToList(); 

如果你不能確定這些元素都是字符串,你可以在空值的情況下使用Select

List<string> stringlist = objectList.Select(x=> x.ToString()) 
            .ToList(); 

爲了避免NullReferenceException請嘗試以下

List<string> stringlist = objectList.Where(x=> x != null) 
            .Select(x=> x.ToString()) 
            .ToList(); 
+0

第二個將失敗'null'值。 – Servy

+0

@Servy我期待這一點,從你這裏得到它。現在修復:) –

2

使用LINQ這很簡單。如果你確信它們都是字符串,你可以簡單地做

int i = //Some code that sets i, like a for loop 
var oldList = seanceInfo.theatre[i].seances; 
List<string> newList = oldList.Cast<string>().ToList(); 

如果你不知道所有的對象都需要執行某種轉換的字符串,當然,這是容易

List<string> newList = oldList.Select(o => Convert.ToString(o)).ToList(); 

從您的評論:「 降神會是List<object>和降神會的第一個指標是object[]我需要這些項目」,我覺得你真的希望可以爲SelectMany

List<string> info = seanceInfo.theatre.SelectMany(x => x.seances).Select(x => Convert.ToString(x)).ToList(); 

這將需要各降神會在每個劇場和一個主列表結合起來。

+0

它的工作原理,但我需要索引[0]列出的項目。您的解決方案不會給我這些項目。 –

+0

@MelihMucuk是的它的確如此,請參閱我更新後的版本,我替換了'\\ ...' –

+0

無法投射類型爲'System.Object []'的對象以輸入'System.String' –

相關問題