В чем разница между типами bool и Boolean в C #

Ответы:

382

boolпсевдоним для так System.Booleanже, как intпсевдоним для System.Int32. Смотрите полный список псевдонимов здесь: Таблица встроенных типов (C # Reference) .

Кент Бугаарт
источник
5
Из приведенной выше ссылки Microsoft говорит, что ключевые слова типа C # и их псевдонимы являются взаимозаменяемыми. Но зачем нам псевдонимы? С моей точки зрения, Boolean более значим, чем bool, а Int32 более значим, чем int, тогда почему псевдонимы ???
Асим Саджад
6
@asim: лень? Он меньше печатает и избавляет от необходимости импортировать систему. Лично я предпочитаю псевдонимы. Ввод "int" гораздо быстрее, чем ввод "Int32".
Кент Бугаарт
8
@asmin: Это вещь C int, float и т. д. являются знакомыми ключевыми словами для программистов на C и C ++, поэтому Microsoft решила использовать эти псевдонимы для согласованности.
Майк Чемберлен
42
@Mikey Я почти уверен, что Java решила использовать эти псевдонимы для согласованности, а Microsoft решила использовать Java для согласованности ... :-)
max
19
@MaxWell В Java booleanи Booleanэто не одно и то же. Один является примитивным типом данных, а другой - объектом.
Росди Касим
48

Я не верю, что есть один.

bool это просто псевдоним для System.Boolean

bhinks
источник
22

Они один в одном. bool это просто псевдоним для логического.

MagicKat
источник
15

Я понимаю, что это много лет спустя, но я наткнулся на эту страницу из Google с тем же вопросом.

На данный момент на странице MSDN есть одно небольшое отличие.

VS2005

Примечание:

Если вам требуется логическая переменная, которая также может иметь значение null, используйте bool. Для получения дополнительной информации см. Обнуляемые типы (Руководство по программированию в C #).

VS2010

Примечание:

Если вам требуется логическая переменная, которая также может иметь значение null, используйте bool ?. Для получения дополнительной информации см. Обнуляемые типы (Руководство по программированию в C #).

Райан Буддиком
источник
2
Меня это смутило - похоже, это ошибка в документации. Сначала я увидел страницу VS2005 (она кажется мне выше в рейтинге Google!) И подумал, что это boolможет содержать ноль, но Booleanне может. Хотя существует ссылка от старой к новой документации, я не прочитал новую документацию достаточно тщательно, чтобы заметить единственную ?разницу.
Логан Пикап
1
Извините, но это неправильно, вы не можете конвертировать bool или Bolean в null, потому что они являются обнуляемыми типами
Timothy Macharia
13

Они одинаковые. Boolean помогает упростить преобразование между C # и VB.Net. Большинство программистов на C # предпочитают «bool», но если вы находитесь в магазине, где много и VB.Net, и C #, то вы можете предпочесть Boolean, потому что он работает в обоих местах.

Джоэл Коухорн
источник
10

Как уже было сказано, они одинаковы. Их два, потому что bool - это ключевое слово C #, а Boolean - класс .Net.

Карра
источник
Так не лучше ли bool для кросс-платформенной совместимости?
Beep Beep
5

bool - псевдоним для логического класса. Я использую псевдоним при объявлении переменной и имени класса при вызове метода в классе.

Джеймс Бутер
источник
8
Из интереса - зачем тебе использовать оба? Я выступаю за использование одного или другого. Либо используйте псевдонимы, либо не используйте, иначе код выглядит грязным и непоследовательным.
Кент Boogaart
2
Я думаю, это выглядит грязно, когда вы не используете оба. Используйте псевдоним для объявления типа данных и используйте имя класса actall при доступе к статическим методам: string x = String.Format ("Today is: {0}", DateTime.Now);
Скотт Дорман
1
Итак, вы должны сделать: int i = Int32.Parse (...); ? У меня есть пара проблем с этим. Во-первых, VS по умолчанию будет подсвечиваться по-другому (я знаю, что вы можете изменить это, но большинство разработчиков просто используют подсветку синтаксиса по умолчанию). Во-вторых, поиск труднее, особенно с long (long / Int64).
Кент Boogaart
4
Да, именно так и должно быть. int не является именем класса, вы не должны вызывать методы для него. С другой стороны, это встроенный тип, определяющий Int32 i; это слишком многословно и не естественно.
AviD
5
смешивание псевдонимов и имен классов просто ничего не добавляет к ясности кода. Выберите один и придерживайтесь его, имхо
Арне Клаассен
2

Они одинаковы, Bool просто System.Boolean сокращен. Используйте Boolean, когда вы работаете с программистом VB.net, так как он работает как с C #, так и с Vb

Prime_Aqasix
источник
1

Обратите внимание, что это Booleanбудет работать только в том случае, если у вас есть using System;(что обычно, но не обязательно, включено) (если вы не записали это как System.Boolean). boolне нужноusing System;

Джеймс Керран
источник
0

bool - это примитивный тип, означающий, что значение (в данном случае true / false) хранится непосредственно в переменной. Булево является объектом. Переменная типа Boolean хранит ссылку на логический объект. Единственная реальная разница - это хранение. Объект всегда будет занимать больше памяти, чем примитивный тип, но в действительности изменение всех ваших логических значений на bool не окажет заметного влияния на использование памяти.

Я ошибался; Вот как это работает в Java с Boolean и Boolean. В C # bool и Boolean являются ссылочными типами. Они оба хранят свои значения непосредственно в переменной, они не могут быть нулевыми, и им обоим требуется метод "convertTO" для хранения их значений в другом типе (например, int). То, какой из них вы используете, имеет значение только в том случае, если вам нужно вызвать статическую функцию, определенную в логическом классе.

Nate
источник
boolи Booleanэто не два разных типа, один тип не является ссылочным типом, вы можете вызывать статический метод для этого одного типа, используя любой идентификатор, и вам на самом деле не нужно вызывать ConvertToметод для преобразования его в другой тип.
Обслуживание
2
Это не правильно, что " boolи Booleanоба являются ссылочными типами". Слова boolи Booleanоба относятся к одному и тому же типу, и этот тип является типом значения, а не ссылочным типом.
Таннер Светт
Спасибо, я пытался проверить, действовал ли C # так же, как Java в этом поле. Вы отвечаете только один, который сравнивает его с Java (хотя, возможно, не намеренно). :)
bvdb
-1

bool - это псевдоним для логического выражения. Псевдонимы - это замена одной строки текста другой (например, search / replace-all в notepad ++) непосредственно перед компиляцией кода. Использование одного над другим не имеет никакого эффекта во время выполнения.

В большинстве других языков один будет примитивным типом, а другой - типом объекта (тип значения и ссылочный тип в жаргоне C #). C # не дает вам выбора между двумя. Когда вы хотите вызвать статический метод, определенный в логическом классе, он автоматически обрабатывает логический метод как ссылочный тип. Если вы создаете новую логическую переменную, она автоматически обрабатывает ее как ссылочный тип (если вы не используете метод Activator.CreateInstance).

Майкл Калдвид
источник
Boolean - это тип значения, а не ссылочный тип.
Обслуживание
-2

Возможно, bool немного легче, чем Boolean; Интересно изменить это:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public bool CanUseOnItems { get; set; }
    }
}

...к этому:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public Boolean CanUseOnItems { get; set; }
    }
}

... заставил мой cs файл прорасти "using System;" Смена типа обратно на «bool» привела к тому, что волосы оператора использования стали серыми.

(Visual Studio 2010, проект WebAPI)

Б. Клэй Шеннон
источник
Это System.Booleanскорее, чем просто Boolean. using System;Показывал, потому что он позволил Booleanбыть правильно интерпретированы как System.Boolean. На самом деле не так светло, как просто менее многословно.
Нат