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

C# .NETC字符串。如果元素值为null,如何输出“null”而不是空字符串?,c#,.net,string,null,C#,.net,String,Null,根据If值中的任何元素为null,则使用空字符串 我使用的代码从数据表中提取数据 rotationValues = string.Join<object>(", ", from r in rotationData.Rows.OfType<DataRow>() select r[5]); 有没有办法简单地让它用null代替空字符串,如下所示: 8, 7, null, 12, null, null, 13, null 您可以选择 r[5] ?? "null" 而

根据If值中的任何元素为null,则使用空字符串

我使用的代码从数据表中提取数据

rotationValues = string.Join<object>(", ",
    from r in rotationData.Rows.OfType<DataRow>() select r[5]);
有没有办法简单地让它用null代替空字符串,如下所示:

8, 7, null, 12, null, null, 13, null
您可以选择

r[5] ?? "null"
而不仅仅是r[5]

另外,在调用泛型方法时只需删除该部分。您加入的仍然是IEnumerable,但编译器将自动推断类型参数

评论后添加:

你的r[5]可能是。然后,这不是一个真正的空引用,而是它的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]中的null值实际上是System.DBNull类型,但它没有用null替换

以下是我最终做的:

rotationValues = string.Join(", ",
    from r in rotationData.Rows.OfType<DataRow>()
    select (r[5].ToString().Length == 0 ? "null" : r[5]));
这是一个我不想做的条件,但我看了这一页,在那里,这个家伙测试了不同的方法来检查字符串是否为空,长度方法是最快的。所以我想检查长度,如果长度为0,则连接null,如果长度不为零,则连接实际的r[5]值

找出原因还是很好的??但是空值不起作用

编辑以供参考:
问题确实是??对null和not DBNull进行操作。另请参见

我说得太快了,答案看起来不错,但一旦实现,它实际上并没有替换空值。以下是rotationData如何产生DataSet myDataSet=新DataSet;mySqlDataAdapter.FillmyDataSet;DataTable rotationData=myDataSet.Tables[Table];再次感谢Jeppe,我还发布了一个后续问题,人们指出null不等于DBNull,请参见
rotationValues = string.Join(", ",
    from r in rotationData.Rows.OfType<DataRow>()
    select (r[5].ToString().Length == 0 ? "null" : r[5]));