Строка а;a.ToBoolean (...) & IConvertible - PullRequest
3 голосов
/ 27 августа 2011

Игра в моно 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 ]

7 голосов
/ 27 августа 2011

Как документация для ToBoolan() для string на MSDN гласит:

Этот член является явной реализацией члена интерфейса . Его можно использовать только тогда, когда экземпляр String приведен к интерфейсу IConvertible. Рекомендуемая альтернатива - вызвать метод Convert.ToBoolean(String).

2 голосов
/ 27 августа 2011

Интерфейс явно реализован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...