根据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发布于 2013-05-18 14:24:06
您可以选择
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-18 15:39:30
为了扩展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
https://stackoverflow.com/questions/16621347
复制相似问题