Convert.ToString()内部的条件表达式评估错误?

时间:2010-11-29 20:04:14

标签: c#

我很难过。为什么第一行和第四行不能评估为空?

null wut

回答后修改

为了他人的利益,可以使用以下方式创建所需的行为:

boolFoo ? null : Convert.ToString(DBNull.Value)

这是有效的,因为Convert.ToString()null意味着string的常见类型。

4 个答案:

答案 0 :(得分:3)

来自MSDN的?: operator文档:

  

first_expressionsecond_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。

在这种情况下,null似乎被隐式转换为System.Object。从{MS}的文档进一步深入挖掘,如果valuenull,则Convert.ToString(Object value)会返回String.Empty

这与您帖子中的第六行不同,因为Convert.ToString(null) 隐式地将null转换为System.Object(因为您不是使用?:运算符。

答案 1 :(得分:2)

看起来他们评估为null,但Convert.ToString(object)null值返回为String.Empty

根据OP的评论进行编辑

Convert.ToString(string)的情况下,即使null,也只返回字符串。由Reflector提供:

public static string ToString(string value)
{
  return value;
}

答案 2 :(得分:1)

Convert.ToString((DBNull)null)调用Convert.ToString(object)重载,returns an empty string如果传递空值。这就是第一行和第四行计算为空字符串的原因。

Convert.ToString(null)调用Convert.ToString(string)重载,因为这是派生最多的适用版本。超载returns the argument unchanged。这就是为什么第六行的计算结果为null。

答案 3 :(得分:0)

它们是null,它的类型只有DBNull