2013-10-01 3 views
1

Я сегодня играл с типом кастинга и наткнулся на что-то интересное. Компилятор C# не может использовать 0 или 1 для булевых типов данных. Например:Невозможно отличить 0 или 1 от булевого в C#

bool b = (bool)0; 

вернет false (если он был в состоянии скомпилировать).

Здесь, кажется, нет никакой информации о потерях, поэтому мой вопрос в том, есть ли какая-то конкретная причина, что компилятор C# не позволяет вам это делать?

+0

«вернет ложь (если бы она была в состоянии скомпилировать)» была бы тавтологией, если бы это была тавтология. –

+2

http://stackoverflow.com/questions/6571312/cant-cast-int-to-bool – TGH

+0

Используйте 'Convert.ToBoolean()' для «слабо типизированных» преобразований. – millimoose

ответ

5

Потому что для того, чтобы ваш бросок работать, каждыйint бы быть в состоянии бросить в bool, а не только 1 и 0. Решение не допускать все целые числа, которые будут рассматриваться в качестве логических значений было сделано целенаправленно , чтобы исключить возможность возникновения ошибок, которые учитываются в учетных записях на языках, где это разрешено, например C и C++.

+0

Почему бы просто не сделать так, чтобы все целые числа не равны? Как C и C++? –

+0

например -345? – ryyker

+0

Итак, остается вопрос. Если бы каждый int смог отбросить bool, была бы потеря информации по всем, кроме двух значений. Он должен по-прежнему работать, если я его явно брошу, потому что я признаю, что могу потерять некоторую информацию. – Rohan

Смежные вопросы