.Net C#String.Join如果元素值为null,如何输出“null”而不是空字符串?

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

代码我从DataTable中提取数据

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

这将导致输出类似于:

 8, 7, , 12, , , 13, 

有没有办法简单地让它“null”代替空字符串,如下所示:

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

你可以选择

 r[5] ?? "null" 

而不仅仅是r[5]

此外,只需在调用generics方法时删除部分。 它仍然是您加入的IEnumerable ,但编译器会自动推断出type参数。

评论后的补充:

你的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] 

希望能帮助到你。

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

这是我最终做的事情:

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

这是一个我不想做的条件,但我看了一下这个页面C#Empty Strings ,那个人用不同的方法来检查一个字符串是否为空并且length方法是最快的。 所以我想检查长度,如果长度为0则加入“null”,当它不为零时加入实际的r[5]值。

找出原因仍然很好?? “null”虽然没有用。

编辑参考:问题的确如此? 在null而不是DBNull 。 另见.Net C#?? 运算符未触发DataTable DataRow中的System.DBNull类型