有沒有辦法在c#或vb.net中將List(of Object)
轉換爲List(of String)
而不迭代所有項目? (幕後迭代是好的 - 我只想簡潔的代碼)將列表(的對象)轉換爲列表(的字符串)
更新: 很可能只是做一個新的,最好的辦法選擇
myList.Select(function(i) i.ToString())
或
myList.Select(i => i.ToString());
有沒有辦法在c#或vb.net中將List(of Object)
轉換爲List(of String)
而不迭代所有項目? (幕後迭代是好的 - 我只想簡潔的代碼)將列表(的對象)轉換爲列表(的字符串)
更新: 很可能只是做一個新的,最好的辦法選擇
myList.Select(function(i) i.ToString())
或
myList.Select(i => i.ToString());
不可能無需重複建立新列表。您可以將列表包裝在實現IList的容器中。
您可以使用LINQ從對象列表這樣得到的IEnumerable<string>
一個懶惰的評估版本:
var stringList = myList.OfType<string>();
否 - 如果要轉換一個列表的所有元素,你就必須觸摸全部該列表中的元素以某種方式或另一種方式。你可以用不同的方式(foreach()......或.ConvertAll()或其他)來指定/寫入迭代,但最後,不管怎樣,某些代碼將會迭代遍歷每個元素並將其轉換。
馬克
如果你想在轉換是如何發生的更多的控制,你可以使用ConvertAll:
var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());
你的意思是這樣的嗎?
List<object> objects = new List<object>();
var strings = (from o in objects
select o.ToString()).ToList();
您可以在List(object)構建時進行字符串轉換嗎?這將是避免List(of object)創建後枚舉整個列表的唯一方法。
這適用於所有類型。
List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();
相反OfType(其過濾列表)的使用選擇(我=> i.ToString()) – 2009-05-22 10:14:02
@geoff:取決於你在找什麼。如果一個元素爲null,則i.ToString將失敗。你也可以考慮Cast(); –
2009-05-22 19:43:46
@MehrdadAfshari:無論空處理如何,OfType()都會過濾掉不是字符串的項 - 它不會嘗試轉換或調用ToString(),它們只會被過濾掉。這不是要求的。 – 2013-07-16 15:20:29