Комментарии 43
Возможно проверить существует или нет значение у переменной
0
Пока в голову приходит только explicit приведения типа… Пытаюсь изобразить в коде…
+1
Необходимость, в том смысле, что нельзя заменить конструкцию if'ом? Или в том смысле, что нельзя заменить конструкцию строчкой bool b=x (или строчкой bool b=(bool)x)? Мое предположение — x может иметь тип bool? позволяющий принимать значение null.
0
необходимость в том, что нельзя написать bool b=x;
решение что х типа bool? первое, которое приходит всем в голову, но в таком случае указанный код не скомпилируется
решение что х типа bool? первое, которое приходит всем в голову, но в таком случае указанный код не скомпилируется
0
Т.е. вы утверждаете что такой код не скомпилируется
bool x = true;
bool b = x? true: false;
?
bool x = true;
bool b = x? true: false;
?
-2
я утверждаю, что не скомпилируется код
bool? x = true;
bool b = x? true: false;
я также утверждаю, что такой код скомпилируется:
bool x = true;
bool b = x;
но обе эти ситуации не имеют отношения к этюду
bool? x = true;
bool b = x? true: false;
я также утверждаю, что такой код скомпилируется:
bool x = true;
bool b = x;
но обе эти ситуации не имеют отношения к этюду
+1
Хе, а забавно получилось. Хотя по идее работать такое не должно…
0
Ну а в чём смысл-то? В кастомной инициализации?
если x истинный будет проинициализировано true иначе false.
Есть ещё такоей момент:
public static implicit operator DBBool(bool x)
{
return x? True: False;
}
но на первоначальную конструкцию он что-то не похож…
если x истинный будет проинициализировано true иначе false.
Есть ещё такоей момент:
public static implicit operator DBBool(bool x)
{
return x? True: False;
}
но на первоначальную конструкцию он что-то не похож…
0
SqlBoolean x = SqlBoolean.Null; =)
+1
браво! Ваше решение засчитывается, но я предполагал кастомный класс, а о том, что подобное есть во фреймворке, даже не подозревал. все-таки не настолько сферический конь )
сможете обобщить ситуацию и указать, что особенного есть в SqlBoolean?
сможете обобщить ситуацию и указать, что особенного есть в SqlBoolean?
0
неа :) этот класс доделан :)
можно делать так
так что ответ неверный… но суть уловили верно :)
можно делать так
SqlBoolean x = SqlBoolean.Null;
bool b = (bool)x;
так что ответ неверный… но суть уловили верно :)
+1
class test
{
int i = 0;
public static bool operator true(test x) { return true; }
public static bool operator false(test x) { return false; }
}
{
int i = 0;
public static bool operator true(test x) { return true; }
public static bool operator false(test x) { return false; }
}
+2
необходимость такого есть только в том случае, если x объявлен как bool? x;
-1
public struct SomeClass
{
public static bool operator false(SomeClass x)
{
return false;
}
public static bool operator true(SomeClass x)
{
return true;
}
}
+3
сразу после написал Вам, что Вы решили правильно, но видимо, не засабмитил комментарий )
видно, перепутал кнопки предпросмотр и написать
видно, перепутал кнопки предпросмотр и написать
+1
А можно пояснить что это за странные операторы? До меня пока не доходит решение.
0
msdn.microsoft.com/en-us/library/eahhcxk2(VS.71).aspx#vclrftrueanchor_trueoperator
0
Правильно ли я понимаю, что запись x?a:b эквивалентна чему-то вроде if (x.operator_true()) { return a;}else if (x.operator_false()){return b;} else{ throw new NullPointerException();}? По указанной ссылке этот вопрос не разъясняется.
0
нет, она эквивалентна X.operator true(x)? a: b;
вызывается только один оператор из двух (они должны быть всегда определены вместе)
какой именно вызывается, зависит от того, какой выгоднее, чтобы оборвать вычисления: если, к примеру, выражение x1 && x2, то вызовется false, если x1 || x2, вызовется true
соответственно, тот, кто пишет эти операторы, может оптимизировать каждый из них под нужную ситуацию. но в любом случае они должны давать противоположный результат
вызывается только один оператор из двух (они должны быть всегда определены вместе)
какой именно вызывается, зависит от того, какой выгоднее, чтобы оборвать вычисления: если, к примеру, выражение x1 && x2, то вызовется false, если x1 || x2, вызовется true
соответственно, тот, кто пишет эти операторы, может оптимизировать каждый из них под нужную ситуацию. но в любом случае они должны давать противоположный результат
0
>> должны давать противоположный результат
По моему, это никак гарантировать нельзя. Или я ошибаюсь?
По моему, это никак гарантировать нельзя. Или я ошибаюсь?
0
смотрите в PPS, надеюсь, понятно написал
0
bananafish, ты?
а если по делу, но я не представляю почему нельзя это же заменить на bool b = (bool)x;
Хотя если вы индус, которому платят (по слухам) за объем кода, то «в каком случае появляется необходимость» писать такой код
а если по делу, но я не представляю почему нельзя это же заменить на bool b = (bool)x;
Хотя если вы индус, которому платят (по слухам) за объем кода, то «в каком случае появляется необходимость» писать такой код
0
я никогда не пользовался ником бананафиш
в данном случае нельзя заменить на bool b = (bool);, смотрите решение )
в данном случае нельзя заменить на bool b = (bool);, смотрите решение )
0
бананафиш — это был такой хабраюзер. и у него был топик, в котором он загадал загадку, у которой небыло решения. а очень много людей пыталось её решить. Вот теперь у меня всегда, когда появляется задачка, в которой на мой взгляд нет решения, всплывает в памяти тот топик.
0
Иногда индус не вы, а тот, чью библиотеку вы используете :) и в ней может быть такой вот недоделанный класс. см коммент над вами.
+1
А занятно. Я требую продолжения!
0
перенесите пожалуйста пост в блог .net, тогда его увидит больше людей, поскольку посты из личных блогов не попадают на главную страницу. кармы для переноса у вас достаточно.
0
Первый раз слышу о том, что подобные операторы можно определять в C#.
0
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
С#: Этюды, часть 1