Pull to refresh

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

.NET *
На канале 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
Tags:
Hubs:
Total votes 56: ↑36 and ↓20 +16
Views 1K
Comments Comments 43