首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net C# String.Join如果元素值为null,如何输出null而不是空字符串?

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

Stack Overflow用户
提问于 2013-05-18 14:19:40
回答 2查看 3.9K关注 0票数 5

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

我的代码从DataTable中提取数据

代码语言:javascript
复制
rotationValues = string.Join<object>(", ",
    from r in rotationData.Rows.OfType<DataRow>() select r[5]);

这将产生类似于以下内容的输出:

代码语言:javascript
复制
8, 7, , 12, , , 13, 

有没有办法简单地让它把"null“放在空字符串的位置,如下所示:

代码语言:javascript
复制
8, 7, null, 12, null, null, 13, null
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-18 14:24:06

您可以选择

代码语言:javascript
复制
r[5] ?? "null"

而不仅仅是r[5]

此外,只要在调用泛型方法时删除<object>部件即可。你加入的类型仍然是一个IEnumerable<object>,但是编译器会自动推断类型参数。

注释后的添加:

您的r[5]可能是DBNull.Value。因此,这不是一个“真正的”空引用,但它的ToString实现返回""。因此,在这种情况下,string.Join文档并不是严格意义上的。因此,请尝试选择如下内容

代码语言:javascript
复制
(r[5] == null || DBNull.Value.Equals(r[5])) ? "null" : r[5]

或者也许

代码语言:javascript
复制
(r[5] == null || r[5] is DBNull) ? "null" : r[5]

希望能有所帮助。

票数 8
EN

Stack Overflow用户

发布于 2013-05-18 15:39:30

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

以下是我最终要做的事情:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16621347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档