【问题标题】:Best way to convert Object[] to String[] or List<String>将 Object[] 转换为 String[] 或 List<String> 的最佳方法
【发布时间】:2011-07-02 04:57:24
【问题描述】:

我有一个数据行。我可以使用dataRow.ItemArray 类型的属性object[] 来获取其中的项目。 我需要将其转换为String[]List&lt;String&gt;

我看到了ToArray&lt;&gt;ToList&lt;&gt; 方法。但不知道如何使用。请帮助。

提前致谢

【问题讨论】:

    标签: c# .net string types


    【解决方案1】:

    ToArray 和 ToList 不会完全满足您的需求,因为它们只会返回对象数组或列表。您需要先将数据按摩成字符串,Select 可以提供帮助。试试这个:

     dataRow.ItemArray.Select(i => i == null ? string.Empty : i.ToString()).ToArray();
    

    【讨论】:

    • 我更喜欢 "" + i 在这种情况下,因为它与三元 w.r.t 具有相同的效果。空值——但风格主观:)
    【解决方案2】:
    List<string> strList = objArray.Cast<String>();
    

    您可能需要先检查空值:

    List<string> strList = objArray.Select( o => o == null ? String.Empty : o.ToString() ).ToList();
    

    【讨论】:

    • 应该指出这不会导致可能(或可能不)需要的转换。
    • 第二个例子是只是第一个带有空值的检查,而是一个显式的转换。应该指出这一点。
    【解决方案3】:

    您可以使用System.Array.ConvertToSystem.Convert.ToString 作为代理。

    【讨论】:

      【解决方案4】:

      根据 dataRow.ItemArray 中的实际对象,您有两种选择

      如果 object[] 中实际上存在字符串对象,则可以明智地转换元素。

      dataRow.ItemArray.OfType<string>().ToList();
      

      但如果对象是另一种类型,例如 int 或其他类型,则需要将其转换为字符串(在此示例中为 .ToString(),但在您的情况下可能需要其他自定义方法

      dataRow.ItemArray.Select(o => o.ToString()).ToList();
      

      编辑:
      如果您不需要明确地使用List&lt;string&gt;string[],则可以将.ToList() 留出,而改为使用IEnumerable&lt;string&gt;

      【讨论】:

      • +1 用于讨论both 强制和转换。考虑在转换示例中提及/处理null/DBNull,因为这些情况比较常见(根据我的经验)。
      【解决方案5】:
       object[] a = new object[10];
       string[] b = Array.ConvertAll(a, p => (p ?? String.Empty).ToString())
      

      (你要的就是第二行)

      【讨论】:

        猜你喜欢
        • 2013-12-22
        • 2018-07-16
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多