Как стать автором
Обновить

С#: Этюды, часть 1

Время на прочтение 2 мин
Количество просмотров 1.1K
На канале c# в irc-сети Руснет пытаюсь развлекать людей т.н. этюдами. Это — короткие задачки, для решения которых требуется знать некоторые тонкости языка и реализации, и которые совсем не очевидны для человека, с упомянутыми тонкостями не знакомого.
Этюд номер 1 каналом уже разгадан, но хабросообщество его пока, скорее всего, не знает.

Если Вы не присутствовали на канале во время расщелкивания этюда — прошу в комменты. Решение появится здесь после того, как задачка будет решена хабралюдьми (или если долго не будет решения).

Итак, вопрос:

в каком случае появляется необходимость писать следующий код (об уместности предполагаемого дизайна дискутировать не стоит, это все сферический конь в вакууме):
bool b = x ? true : false;



Кстати, одним из мотивов написания этого поста было использование инвайтов на хабр как поощрений решившему задачку (пока отделался инвайтом на гугл вейв). Поэтому прошу помочь с кармой.

PS Ну что ж, молодцы, справились очень быстро.
Итак, решение. Тип объекта x должен определять операторы true и false и не должен определять оператор приведения к типу bool:
class X
{
public X(bool b)
{
inner = b;
}
private bool inner = false;
public static bool operator true(X x)
{
return x.inner;
}

public static bool operator false(X x)
{
return !x.inner;
}
}
...
X x = new X(false);
bool b = x ? true : false;


Решение в явном виде первым дал пользователь Baks, а хабраюзер CyberCore указал, что есть класс SqlBoolean, который почти соответствует указанному (правда, в нем есть оператор явного приведения типа).
Спасибо всем!

PPS Чтоб совсем прояснить картину, укажу, что операторы true и false можно использовать в конструкциях if, while и т.п., а также в тернарном операторе. При этом явное присвоение булевской переменной требует других операторов

PPPS Спасибо за карму, перенес в .NET
Теги:
Хабы:
+16
Комментарии 43
Комментарии Комментарии 43

Публикации

Истории

Работа

.NET разработчик
66 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн