字符串a; a.ToBoolean(...)& IConvertible

时间:2011-08-26 22:22:18

标签: c# interface

在Mono 2.10中播放REPL:

csharp> string a = "true";
csharp> a.ToBoolean(CultureInfo.InvariantCulture);
{interactive}(1,4): error CS1061: Type `string' does not contain a definition fo
r `ToBoolean' and no extension method `ToBoolean' of type `string' could be foun
d (are you missing a using directive or an assembly reference?)
C:\PROGRA~1\MONO-2~1.2\lib\mono\4.0\mscorlib.dll (Location of the symbol related
 to previous error)


csharp> ((IConvertible)a).ToBoolean(CultureInfo.InvariantCulture);
true
csharp>

根据文档,System.String实现了IConvertible。如果这是真的,为什么

a.ToBoolean(CultureInfo.InvariantCulture);

失败?

为什么我必须将其强制转换为IConvertible以使ToBoolean工作?

2 个答案:

答案 0 :(得分:7)

正如the documentation for ToBoolan() for string on MSDN所述:

  

该成员为an explicit interface member implementation。仅当String实例强制转换为IConvertible接口时,才能使用它。建议的替代方法是调用Convert.ToBoolean(String)方法。

答案 1 :(得分:2)

明确实现了接口。