簡體   English   中英

在 C# 中轉換列表<dynamic>列出<string>

[英]In C# Convert List<dynamic> to List<string>

假設我有一個包含字符串的List<dynamic>對象:

var dlist = new List<dynamic>()
{
    "test",
    "test2",
    "test3"
};

有沒有什么有效的方法可以將其轉換為正確的List<string>對象? 我知道我可以遍歷這個列表並將每個元素轉換為一個字符串,然后將它添加到結果列表中,但也許一些 Linq 魔術可以在一行中完成這個技巧?

我嘗試將一些Select()ToList()Cast<string>結合使用,但無濟於事。 這應該如何正確完成?

注意:說“高效”我的意思當然是代碼行數。 我不考慮執行時間或性能。 另外 - 假設我不需要類型檢查,只有在這個動態列表中才會有字符串。

編輯:好的,關於“為什么 Cast 不適合你”的評論 - 看起來我在收到的數據方面遇到了另一個問題(我正在使用 Dapper),這就是它不起作用的原因。 抱歉造成混亂,我認為我的列表轉換是錯誤的,而問題與此無關。

給定的

var dList = new List<dynamic>() { /*...initialize list */ };

如果您有興趣提取集合中的所有字符串,忽略所有其他類型,您可以使用:

// Solution 1: Include only strings, no null values, no exceptions thrown
var strings = dlist.OfType<string>().ToList();

如果您確定列表中的所有項目都是字符串(如果不是,則會拋出異常),您可以使用:

// Solution 2: Include strings with null values, Exception for other data types thrown
var strings = dlist.Cast<string>().ToList();

如果您想要列表中所有項目的默認字符串表示形式( null null ,您可以使用:

// Solution 3: Include all, regardless of data type, no exceptions thrown
var strings = dlist.Select(item => item?.ToString()).ToList();

這個答案適用於dart/flutter

給定的

List<dynamic> dList;

你可以使用

var sList = List<String>.from(dlist);

List<dynamic>轉換為List<String>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM