【问题标题】:.Net C# String.Join how to output "null" instead of empty string if element value is null?.Net C# String.Join 如果元素值为null,如何输出“null”而不是空字符串?
【发布时间】:2013-05-18 06:19:39
【问题描述】:

根据MSDN docs for String.Join“如果value中的任何元素为null,则使用空字符串代替。”

我的代码从数据表中提取数据

rotationValues = string.Join<object>(", ",
    from r in rotationData.Rows.OfType<DataRow>() select r[5]);

这将导致类似于以下的输出:

8, 7, , 12, , , 13, 

有什么方法可以简单地将“null”代替空字符串,如下所示:

8, 7, null, 12, null, null, 13, null

【问题讨论】:

    标签: c# .net string null


    【解决方案1】:

    你可以选择

    r[5] ?? "null"
    

    而不仅仅是r[5]

    另外,调用泛型方法时只需删除&lt;object&gt; 部分。你加入的仍然是IEnumerable&lt;object&gt;,但编译器会自动推断类型参数。

    评论后添加:

    您的r[5] 可能是DBNull.Value。那么,这不是一个“真正的”空引用,但它的ToString 实现返回""。所以在那种情况下,string.Join 文档并不是严格相关的。因此,尝试选择类似

    (r[5] == null || DBNull.Value.Equals(r[5])) ? "null" : r[5]
    

    或许

    (r[5] == null || r[5] is DBNull) ? "null" : r[5]
    

    希望对你有帮助。

    【讨论】:

    • 我说得太早了,答案看起来不错,但一旦实施,它实际上并没有替换 NULL 值。以下是 rotationData 是如何产生 DataSet myDataSet = new DataSet(); mySqlDataAdapter.Fill(myDataSet); DataTable rotationData = myDataSet.Tables["Table"];
    • 再次感谢 Jeppe,我还发布了一个后续问题,导致人们指出 null 不等于 DBNull,请参阅 stackoverflow.com/questions/16621962/…
    【解决方案2】:

    为了扩展 Jeppe 的答案,我不确定为什么他的方式实际上对我不起作用,我确认 r[5] 中的空值实际上是 System.DBNull 类型,但它没有用“空”。

    这就是我最终做的事情:

    rotationValues = string.Join(", ",
        from r in rotationData.Rows.OfType<DataRow>()
        select (r[5].ToString().Length == 0 ? "null" : r[5]));
    

    这是一个我不想做的条件,但我查看了这个页面C# Empty Strings,该人对检查字符串是否为空的不同方法进行了基准测试,并且长度方法是最快的。所以我想检查长度并在长度为 0 时加入“null”,当长度不为零时加入实际的 r[5] 值。

    找出原因还是很好的 ??但“null”不起作用。

    编辑以供参考: 问题确实是这样??在 null 而不是 DBNull 上运行。另见.Net C# ?? operator didn't trigger for System.DBNull type in DataTable DataRow

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 2013-08-17
      • 2011-03-29
      • 1970-01-01
      • 2010-12-11
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多