.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类型