Альтернатива функциям преобразования типов в VB.NET (CBool) в C #? - PullRequest
4 голосов
/ 29 июня 2011

Есть ли альтернатива ключевому слову VB CBool в C #?

А как насчет всех других функций?

CBool превратится в булево любоедопустимое логическое значение: 0, "False", null и т. д.

Ответы [ 3 ]

10 голосов
/ 29 июня 2011

Хитрость в том, что Cxx «функции» в VB.NET на самом деле не являются функциями . Фактически, они больше похожи на операторы , которые компилятор переводит на то, что он определяет как преобразование типа "наилучшее совпадение".

У Пола Вика была отличная статья об этом в его блоге, но все эти страницы, похоже, уже были удалены. MSDN (что здесь в основном верно) говорит:

Эти функции скомпилированы inline, что означает, что код преобразования является частью кода, который оценивает выражение. Иногда нет вызова процедуры для выполнения преобразования, что повышает производительность. Каждая функция приводит выражение к определенному типу данных.

Доступные опции включают прямое приведение (например, (bool)var), попытку приведения (с использованием оператора as), вызов одного из методов, определенных в * 1019. * class , вызов соответствующего метода Type.Parse и, возможно, некоторых других стратегий.

Прямого эквивалента в C # нет: вместо этого вы должны мыслить компилятором.

В этом случае вы почти наверняка захотите использовать соответствующую перегрузку метода Convert.ToBoolean, поскольку этот конкретный метод будет иметь необходимую логику для преобразования значения в bool. Прямое действие здесь не сработает.

4 голосов
/ 29 июня 2011

Взгляните на класс System.Convert.

0 голосов
/ 15 ноября 2011

Если вы ожидаете преобразования из одного из строковых значений: «True», «true», «False» или «false», вы должны использовать Boolean.Parse.Вместо того, чтобы пытаться быть «умным», Parse «быстро провалится», если не получит того, что ожидает.Используя «умное» преобразование, когда оно вам действительно не нужно, вы можете замаскировать ошибки в их источнике, а затем отследить их, когда они появятся позже в коде, что обычно более сложно.

...