【发布时间】:2018-11-28 03:13:54
【问题描述】:
我发现了 Convert.ToString 的一个奇怪行为,我想了解它为什么会这样。
看看下面的代码片段:
string obj = null;
var str = Convert.ToString(obj);
Console.WriteLine(str); // CORRECT: returns null;
到目前为止一切都很好,但是:
DBNull obj = DBNull.Value;
var str = Convert.ToString(obj);
Console.WriteLine(str); // ???: returns string.Empty ("")
和
object obj = null;
var str = Convert.ToString(obj);
Console.WriteLine(str); // ???: returns string.Empty ("")
在我看来它像一个错误,因为当我转换为字符串并且输入为 NULL 时,结果应该是字符串的默认值,它也是 NULL。
【问题讨论】:
-
按照这里的 msdn:msdn.microsoft.com/en-us/library/astxcyeh(v=vs.110).aspx,它正在返回。
-
我知道,但我不明白他们为什么要在相同的输入上表现出不同的方法。
-
DBNull 覆盖 ToString 和 IConvertible.ToString 并且它们都返回 string.Empty。您确定那里的结果吗,因为 Convert.ToString(IConvertible) 委托给这些方法。 Convert.ToString((string)null) 只返回参数是有道理的(并且参考源支持这一点)。如果为 null,则 Convert.ToString(object) 的源返回 string.Empty
-
对,我的错 - 所以只是字符串重载的行为不同。我编辑了我的问题并检查了其中一个答案作为解决方案。
标签: c# string type-conversion