5

根据String.Join 的 MSDN 文档“如果 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
4

2 回答 2

8

你可以选择

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]

希望能帮助到你。

于 2013-05-18T06:24:06.473 回答
0

为了扩展 Jeppe 的答案,我不确定为什么他的方式实际上对我不起作用,我确认其中的 null 值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而不是DBNull。另请参见.Net C# ?? 运算符未触发 DataTable DataRow 中的 System.DBNull 类型

于 2013-05-18T07:39:30.260 回答