- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
private static string f(bool? arg)
{
switch (arg)
{
case true: return "true";
case false: return "false";
case null: return "null";
default: return "???";
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+139
private static string f(bool? arg)
{
switch (arg)
{
case true: return "true";
case false: return "false";
case null: return "null";
default: return "???";
}
}
В продолжение историй про bool-shit. Если строку 8 убрать, то Visual Studio пишет:
"Error 3 'f(bool?)': not all code paths return a value"
Что должно быть в аргументе, чтобы попасть в ветку default?
abatishchev 11.10.2012 13:24 # 0
vse_govno 11.10.2012 13:27 # 0
Соответственно, оцените полет собственной мысли - вы делаете switch по объекту.
absolut 11.10.2012 13:34 # +3
vse_govno 11.10.2012 19:16 # 0
http://ideone.com/WQzev
Таким образом, вы делаете switch по структуре.
3.14159265 11.10.2012 14:05 # +3
Разве что придумают какой-то Not A Bool but Shit
vse_govno 11.10.2012 19:17 # +4
3.14159265 11.10.2012 19:23 # +1
Всё верно. Снова LINQ, снова костыли.
>какая в нем должна быть логика?
Тернарная!
vse_govno 11.10.2012 19:38 # 0
3.14159265 11.10.2012 20:04 # +1
И потому она подходит для описания женского образа мыслей.
В том числе позволяет увязывать взаимоисключающие предикаты в одном истинном высказывании.
vse_govno 11.10.2012 21:52 # +1
Steve_Brown 11.10.2012 18:01 # 0
Можно и без всяких nullable, кстати.
http://ideone.com/ghJjr
А вот как попасть в ветку default, непонятно. Хотел отнаследоваться от Nullable<bool> и переопределить Equals, но это структура, от структур не наследуются... разве что использовать небезопасный код и записать на место булевой переменной, скажем, 2. Интересно, что будет, кстати.
3.14159265 11.10.2012 18:22 # 0
Там обычно стоят !=0
>и переопределить Equals
>Интересно, что будет, кстати.
Бред какой-то.
Возвращаемый Equals тип boolean. Либо равно, либо нет.
wvxvw 11.10.2012 18:57 # 0
Тогда и приведение типов не нарушается, и зачастую можно сократить код для того, чтобы не заменять значение, а прямо его же и вернуть. В такой ситуации equals могло бы возвращать что угодно. Бутдет ли оно приводится к bool или нет - дело принимающей стороны все равно.
3.14159265 11.10.2012 19:19 # +1
Объекты? От true?
Вы какую траву курите?
>equals могло бы возвращать
Могло бы. Да это полное говно.
Вот как есть.
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
wvxvw 11.10.2012 20:32 # 0
3.14159265 11.10.2012 19:20 # +1
generalized boolean: object used as a truth value, where the symbol nil represents false and all other objects represent true.
Суть сего в переводе на реалии шарпа: (obj!=null).
То бишь ссылка на объект !=0. То о чем я говорил выше.
vse_govno 11.10.2012 19:20 # +3
if(nullable.Equals(true)) { }
else if(nullable.Equals(false)) { }
else if(nullable.Equals(null)) { }
else { }
Последняя ветка else — результат незнания компилятором кишок типа и невозможности оценить покрытие кода.
absolut 11.10.2012 21:03 # +1
Steve_Brown 12.10.2012 10:13 # +1
Steve_Brown 12.10.2012 10:14 # 0
Я хотел всегда возвращать false. Тогда бы мы пришли в ветку default, см. комментарий снизу.
3.14159265 12.10.2012 14:25 # 0
http://reflector.webtropy.com/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/src/BCL/System/Nullable@cs/1305376/Nullable@cs
Но тудa окроме true, false и null ничего не запишешь, когда T is bool.
guest 06.11.2012 18:06 # 0