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

时间:2013-05-18 06:19:40

标签: c# .net string null

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

我从DataTable中提取数据的代码

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

2 个答案:

答案 0 :(得分:7)

您可以选择

r[5] ?? "null"

而非r[5]

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

评论后添加:

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

希望它有所帮助。

答案 1 :(得分:0)

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

以下是我最终做的事情:

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