Что я должен увидеть в сравнении? Во первых, твой код даже не скомпилится, а некомпилящегося безобразия можно написать много и разного. Во-вторых, в оригинальном примере вызывался вовсе не метод DateTime: и что полезного мы получим от сравнения вызова метода одной структуры с вызовом метода другой?
Help will always be given at Hogwarts to those who ask for it.
Мне не надо обьяснять как оно работает. Я это прекрасно понимаю.
Мне ненравится как оно выглядит в принципе.
Если посмотреть на то что мы делаем и сильно не вдумываться — мы берём и присваиваем null некоторой переменной.
А потом у неё вызываем метод который прекрасно работает.
Как минимум выглядит это странно.
Здравствуйте, Tom, Вы писали:
Tom>Мне не надо обьяснять как оно работает. Я это прекрасно понимаю. Tom>Мне ненравится как оно выглядит в принципе. Tom>Если посмотреть на то что мы делаем и сильно не вдумываться — мы берём и присваиваем null некоторой переменной. Tom>А потом у неё вызываем метод который прекрасно работает. Tom>Как минимум выглядит это странно.
Нет, не выглядит: с тем же успехом можно вызвать extension-метод, который может вернуть даже что-то осмысленное. Просто не нужно на этой мелочи заморачиваться, в ней ничего ни умного ни интересного нет.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Что я должен увидеть в сравнении?
то что два очень схожих вызова ведут себя совершенно по разному _FR> Во первых, твой код даже не скомпилится,
извиняюсь. под рукой нет ничего на чем можно проверить
_FR>Нет, не выглядит: с тем же успехом можно вызвать extension-метод, который может вернуть даже что-то осмысленное. Просто не нужно на этой мелочи заморачиваться, в ней ничего ни умного ни интересного нет.
Я думаю для переходящих с C/С++/Java оно будет не очень понятно до осознания value типов.
Здравствуйте, Tom, Вы писали:
_FR>>Нет, не выглядит: с тем же успехом можно вызвать extension-метод, который может вернуть даже что-то осмысленное. Просто не нужно на этой мелочи заморачиваться, в ней ничего ни умного ни интересного нет.
Tom>Я думаю для переходящих с C/С++/Java оно будет не очень понятно до осознания value типов.
Для осознания value-типов и всего остального [нового] нужно впервую очередь отбросить предрассудки и внимательно ознакомится с литературой по предмету, а не то можно и на более неприятные косяки нелететь. Накладывать свой [старый] опыт на новое нужно очень осторожно. Зарвавшиеся являются сами себе буратинами.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Константин Л., Вы писали:
КЛ>при чем здесь это? неравнозначный пример
Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Константин Л., Вы писали:
КЛ>>при чем здесь это? неравнозначный пример GZ>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
да неужели?
null.ToString();
error CS0023: Operator '.' cannot be applied to operand of type '<null>'
Здравствуйте, cvetkov, Вы писали:
_FR>>Что я должен увидеть в сравнении? C>то что два очень схожих вызова ведут себя совершенно по разному
Следующие два вызова ещё более похожи друг на друга
File.Delete(path); // 1
File.Create(path); // 2
однако и тут ведут себя (ну надо же!) не одинаково.
То, что "похожие" вещи ведут себя по-разному [уж тем более в нашем деле] является весьма и весьма распространённой ситуацией. Ключ к пониманию которой в том, что нужно _правильно_ (по _правильным_ параметрам, а не надуманным) определять, какие вещи "одинаковы" (в _чём_!), а какие нет. В данном конкретном случае ключом служат правила языка, и если их не понимать, то можно и в более простых вещах сесть в лужу.
Обсуждение же достоинств языка с позиции понятности-непонятности их любому новичку [в данном конкретном языке\технологии] могут завести в такие дебри, из которых уже будет не выбраться никому из участников.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Константин Л., Вы писали:
КЛ>>>при чем здесь это? неравнозначный пример GZ>>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
КЛ>да неужели?
КЛ>null.ToString();
КЛ>error CS0023: Operator '.' cannot be applied to operand of type '<null>'
И что тебя удивляет? Что у "ещё одного значения" есть некоторые ограничения? Так они есть у любого значения: Например, у Math.PI нет метода "GetSomthing()".
Детский сад
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Константин Л., Вы писали:
КЛ>>>>при чем здесь это? неравнозначный пример GZ>>>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
КЛ>>да неужели? _FR>
КЛ>>null.ToString();
_FR>
_FR>
КЛ>>error CS0023: Operator '.' cannot be applied to operand of type '<null>'
_FR>И что тебя удивляет? Что у "ещё одного значения" есть некоторые ограничения? Так они есть у любого значения: Например, у Math.PI нет метода "GetSomthing()".
меня не удивляет, а смущает, что у "еще одного значения" разное поведение.
_FR>Детский сад
эмоционально окрашенные определения прошу оставить при себе
Re[8]: Nullable & синтаксис
От:
Аноним
Дата:
21.04.09 14:53
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>И что тебя удивляет? Что у "ещё одного значения" есть некоторые ограничения? Так они есть у любого значения: Например, у Math.PI нет метода "GetSomthing()".
Было бы круто, если бы разработчики сделали такую имплементацию: null.ToString(){return "";}.
Задолбало писать простыни
if (!string.IsNullOrEmpty(o1))
result += o1.ToString();
...
if (!string.IsNullOrEmpty(o10))
result += o10.ToString();
Здравствуйте, Константин Л., Вы писали:
КЛ>меня не удивляет, а смущает, что у "еще одного значения" разное поведение.
С чего ты взял что это у тебя значение? Ты предлагаешь чтобы такое компилировалось?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, _FRED_, Вы писали:
_FR>>И что тебя удивляет? Что у "ещё одного значения" есть некоторые ограничения? Так они есть у любого значения: Например, у Math.PI нет метода "GetSomthing()".
А>Было бы круто, если бы разработчики сделали такую имплементацию: null.ToString(){return "";}.
А>Задолбало писать простыни
А>
А>if (!string.IsNullOrEmpty(o1))
А> result += o1.ToString();
А>...
А>if (!string.IsNullOrEmpty(o10))
А> result += o10.ToString();
А>
Здравствуйте, Аноним, Вы писали: А>Было бы круто, если бы разработчики сделали такую имплементацию: null.ToString(){return "";}.
А>Задолбало писать простыни
result += o1.ToString() + ... + o10.ToString();
А если бы Вы правильно складывали строки, то есть StringBuilder'ом, то Вы бы обратили внимание на то, что null в качестве входного String он просто игнорирует Как и в строках формата
var buf = new StringBuilder();
buf.Append(o1);
buf.Append(o2);
buf.Append(o3);
....
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Константин Л., Вы писали:
КЛ>>при чем здесь это? неравнозначный пример GZ>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
В SQL реализована нормальная трёхзначная логика. Что с ним не так?
Re[10]: Nullable & синтаксис
От:
Аноним
Дата:
21.04.09 15:16
Оценка:
Здравствуйте, anton_t, Вы писали:
А>>
А>>if (!string.IsNullOrEmpty(o1))
А>> result += o1.ToString();
А>>...
А>>if (!string.IsNullOrEmpty(o10))
А>> result += o10.ToString();
А>>
Здравствуйте, anton_t, Вы писали:
_>В SQL реализована нормальная трёхзначная логика. Что с ним не так?
Что значит нормальная? Сделай следующий запрос, и скажи насколько она трехзначна.
select field, count(field) from table group by field — где field содержит NULL значения
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, anton_t, Вы писали:
_>>В SQL реализована нормальная трёхзначная логика. Что с ним не так? GZ>Что значит нормальная? Сделай следующий запрос, и скажи насколько она трехзначна. GZ>select field, count(field) from table group by field — где field содержит NULL значения
Всё правильно получатся. Подозреваю, что бы получилось то, что нужно тебе, надо выполнить
select field, count(*) from [table] group by field
Здравствуйте, anton_t, Вы писали:
_>Всё правильно получатся.
С точки зрения SQL — да. _>Подозреваю, что бы получилось то, что нужно тебе, надо выполнить
Мне не нужно. Мне нужно чтобы он исполнил мои ожидания. Я заказывал количество данных элементов. И как результат, либо вынесите NULL нафиг из запроса, либо означьте его как значение(пускай даже оно называется Unknown). Оно получается не то, и не то. В Net — такое проблемы нет.
У Дейта были более интересные примеры с совместимостью с реальным миром. Поищи через гугл.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, anton_t, Вы писали:
_>>Всё правильно получатся. GZ>С точки зрения SQL — да. _>>Подозреваю, что бы получилось то, что нужно тебе, надо выполнить GZ>Мне не нужно. Мне нужно чтобы он исполнил мои ожидания. Я заказывал количество данных элементов. И как результат, либо вынесите NULL нафиг из запроса, либо означьте его как значение(пускай даже оно называется Unknown). Оно получается не то, и не то.
Ожидания у всех разные. Нужно просто понять SQL и не ожидать от него чего-то не того. Запросил количество строк с определённым значением поля — получи. Ты же что-то имел ввиду, когда написал count(field) вместо count(*)?
GZ>В Net — такое проблемы нет.
GZ>У Дейта были более интересные примеры с совместимостью с реальным миром. Поищи через гугл.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, anton_t, Вы писали:
_>>А, ну так-то да. Если 3-й C#, то можно так:
_>>
_>>using System;
_>>namespace ConsoleApplication44
_>>{
_>> class Program
_>> {
_>> static void Main(string[] args)
_>> {
_>> object test = null;
_>> Console.WriteLine(test.ToStr());
_>> Console.ReadLine();
_>> }
_>> }
_>> public static class StringHelper
_>> {
_>> public static string ToStr (this object obj)
_>> {
_>> if (ReferenceEquals(obj, null))
_>> return string.Empty;
_>> return obj.ToString();
_>> }
_>> }
_>>}
_>>
А>Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать.
И почему модно считать себя умнее кучи программистов из МС?
Здравствуйте, GlebZ, Вы писали:
GZ>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
В типизированных языках любое значение имеет тип. Какой тип у "значения" null?
Здравствуйте, Lloyd, Вы писали:
L>В типизированных языках любое значение имеет тип. Какой тип у "значения" null?
Зависит от контекста использования. Куда ты его присваиваешь, тот и тип. Однако — это демагогия. Ну например, void — не является значением. Однако ты же можешь получить его тип.
Re[14]: Nullable & синтаксис
От:
Аноним
Дата:
22.04.09 06:25
Оценка:
Здравствуйте, gandjustas, Вы писали:
А>>Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать. G>И почему модно считать себя умнее кучи программистов из МС?
G>См Convert.ToString
Первое и главное. Что общего у Convert.ToString и у примера, приведенного Антоном Т.?
Второе, при чем здесь ум и куча программистов? Если собрать кучу программистов, да еще покрасить в красно-сине-желто-зеленые цвета, они сделают продукт без единого серого пятнышка? Все, чего хотелось бы — чтоб соответствующая библиотека была сделана в МСе, чтобы не изобретать велосипед.
Здравствуйте, Аноним, Вы писали:
А>>>Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать. G>>И почему модно считать себя умнее кучи программистов из МС?
G>>См Convert.ToString
А>Первое и главное. Что общего у Convert.ToString и у примера, приведенного Антоном Т.?
Так вот, это НЕ то же самое, что предложил Антон:
_FR>result += o1.ToString(); _FR>... _FR>result += o10.ToString();
Если бы там был реализован статичный SafeToString(this object o), это я бы принял как возражение и согласился. А так — ну, еще один способ написать код. Могу предложить много других. Например, o == null ? "" : o.ToString().
_FR>А мог бы и вовсе обойтись этим: _FR>
result += String.Concat(o1, …, o10);
Вот про это не знал, поскольку привык пользоваться операторами (они, по-моему, читабельнее). Спасибо, теперь знаю. Но это частный случай, когда нужна конкатенация. (Таков уж мой пример). Я оставляю свое утверждение в силе: в МСе могли бы сделать код, предложенный Антоном и это было бы разумно. Почему? Потому, что это решение очевидно. Я сам независимо пришел к нему, когда возникла эта проблема. И еще один мой знакомый. Тоже независимо. Когда этот код независимо изобретают и реализуют, напоминает велосипедостроение.
Ладно, это были частности. Как насчет большого вопроса: зачем "у "ещё одного значения" есть некоторые ограничения"? Чем они обоснованы? null.ToString() — это было бы здорово.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, anton_t, Вы писали:
_>>Ожидания у всех разные. Нужно просто понять SQL и не ожидать от него чего-то не того. Запросил количество строк с определённым значением поля — получи. Ты же что-то имел ввиду, когда написал count(field) вместо count(*)? GZ>Какая разница между ними, если кортеж может содержать одно поле со значением NULL? Я оперирую данными, но в данном случае мы получаем разные результаты.
Здравствуйте, Аноним, Вы писали:
А> Почему? Потому, что это решение очевидно.
Это вовсе не очевидно. потому что пустая строка и null в принципе разные значени. И не всегда нужно чтобы null.ToString() возвращал пустую строку. я обычно в таких случаях пишу
public static string GetString (this object Value, string defValue);
Здравствуйте, anton_t, Вы писали:
_>Разница большая. Первый считает строки, в которых определено (т.е. не NULL) поле field, а второй считает все строки.
Ты опять ввел логику хранения данных SQL. Между тем, данные либо есть, либо нет. Почему для group by данные есть а для count — нет?
Это противоречит цели SQL, который разрабатывался как язык доступа для кухарок. На мой взгляд это было ошибкой. В результате и кухарки остались на кухне, и язык испоганили.
зы. аднако уже пошел офтопп.
Здравствуйте, GlebZ, Вы писали:
GZ>… SQL, … разрабатывался как язык доступа для кухарок. На мой взгляд это было ошибкой. В результате и кухарки остались на кухне, и язык испоганили.
Help will always be given at Hogwarts to those who ask for it.
Re[18]: Nullable & синтаксис
От:
Аноним
Дата:
22.04.09 09:04
Оценка:
Здравствуйте, Ziggi111, Вы писали:
А>> Почему? Потому, что это решение очевидно. Z>Это вовсе не очевидно. потому что пустая строка и null в принципе разные значени. И не всегда нужно чтобы null.ToString() возвращал пустую строку. я обычно в таких случаях пишу
Слова "это решение очевидно" относились к решению Антона.
Здравствуйте, GlebZ, Вы писали:
L>>В типизированных языках любое значение имеет тип. Какой тип у "значения" null? GZ>Зависит от контекста использования. Куда ты его присваиваешь, тот и тип.
Это будет не тип значения, а тип переменной. Почувствуте разницу.
GZ>Ну например, void — не является значением. Однако ты же можешь получить его тип.
Из того, что у любого значения есть тип, не следует, что для каждого типа существует значение.
Здравствуйте, Аноним, Вы писали: А>Здравствуйте, _FRED_, Вы писали: _FR>>И что тебя удивляет? Что у "ещё одного значения" есть некоторые ограничения? Так они есть у любого значения: Например, у Math.PI нет метода "GetSomthing()". А>Было бы круто, если бы разработчики сделали такую имплементацию: null.ToString(){return "";}. А>Задолбало писать простыни А>
А>if (!string.IsNullOrEmpty(o1))
А> result += o1.ToString();
А>...
А>if (!string.IsNullOrEmpty(o10))
А> result += o10.ToString();
А>