【发布时间】:2016-09-13 05:27:08
【问题描述】:
考虑以下代码行:
System.Data.SqlTypes.SqlBoolean sb = true; // (1)
bool b = sb; // (2)
bool b = sb ? true : false; // (3)
if (sb) // (4)
{
}
(1) 工作正常,我猜是因为public static implicit operator SqlBoolean(bool x)。
(2) 给我以下错误 (CS0266):
无法将类型“System.Data.SqlTypes.SqlBoolean”隐式转换为“bool”。存在显式转换(您是否缺少演员表?)
我了解从bool 到SqlBoolean 的转换是明确的(public static explicit operator bool(SqlBoolean x)),可能是因为SqlBoolean.IsNull 可能是真的。
那么为什么 (3) 和 (4) 有效呢?这些看起来像是隐式转换。
【问题讨论】:
-
你试过
bool b = (bool)sb;吗? -
我不明白你的意思,因为这是尽可能明确的。
-
我想说的是,只有一种方法可以实现:使用显式转换。
标签: c# .net-4.0 implicit-conversion