Nullable & синтаксис
От: Tom Россия http://www.RSDN.ru
Дата: 21.04.09 09:00
Оценка: +2
Это меня одного смущает что такой код компилируется и самое главное не падает?


DateTime? timeToCall = null;
string s = timeToCall.ToString();
Народная мудрось
всем все никому ничего(с).
Re: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 21.04.09 09:09
Оценка: +3 -3
Здравствуйте, Tom, Вы писали:

Tom>Это меня одного смущает что такой код компилируется и самое главное не падает?

Tom>DateTime? timeToCall = null;
Tom>string s = timeToCall.ToString();


А чему там падать? Тип "DateTime?" является value type, поэтому ToString() вызывается "на ура".

"= null" компилятором превращается в инициализацию этой самой структуры, ведь такой код ничем не смущает:
DateTime? timeToCall = new Nullable<DateTime>(); // like "= null"
string s = timeToCall.ToString();
Help will always be given at Hogwarts to those who ask for it.
Re: Nullable & синтаксис
От: cvetkov  
Дата: 21.04.09 09:10
Оценка:
здесь
Re[2]: Nullable & синтаксис
От: cvetkov  
Дата: 21.04.09 09:29
Оценка:
сравни с
DateTime? dt = null;
dt.AddMilliseconds(0.0);

или другим каким методом класса DateTime
Re[3]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 21.04.09 11:32
Оценка: -1
Здравствуйте, cvetkov, Вы писали:

C>сравни с

C>DateTime? dt = null;
C>dt.AddMilliseconds(0.0);

C>или другим каким методом класса DateTime

Что я должен увидеть в сравнении? Во первых, твой код даже не скомпилится, а некомпилящегося безобразия можно написать много и разного. Во-вторых, в оригинальном примере вызывался вовсе не метод DateTime: и что полезного мы получим от сравнения вызова метода одной структуры с вызовом метода другой?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Nullable & синтаксис
От: Tom Россия http://www.RSDN.ru
Дата: 21.04.09 12:56
Оценка: -1
Мне не надо обьяснять как оно работает. Я это прекрасно понимаю.
Мне ненравится как оно выглядит в принципе.
Если посмотреть на то что мы делаем и сильно не вдумываться — мы берём и присваиваем null некоторой переменной.
А потом у неё вызываем метод который прекрасно работает.
Как минимум выглядит это странно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1139>>
Народная мудрось
всем все никому ничего(с).
Re[3]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 21.04.09 13:12
Оценка: -2 :)
Здравствуйте, Tom, Вы писали:

Tom>Как минимум выглядит это странно.

А 3.ToString() тоже выглядит странным?
Re[3]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 21.04.09 13:23
Оценка: +1
Здравствуйте, Tom, Вы писали:

Tom>Мне не надо обьяснять как оно работает. Я это прекрасно понимаю.

Tom>Мне ненравится как оно выглядит в принципе.
Tom>Если посмотреть на то что мы делаем и сильно не вдумываться — мы берём и присваиваем null некоторой переменной.
Tom>А потом у неё вызываем метод который прекрасно работает.
Tom>Как минимум выглядит это странно.

Нет, не выглядит: с тем же успехом можно вызвать extension-метод, который может вернуть даже что-то осмысленное. Просто не нужно на этой мелочи заморачиваться, в ней ничего ни умного ни интересного нет.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Nullable & синтаксис
От: cvetkov  
Дата: 21.04.09 13:28
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Что я должен увидеть в сравнении?

то что два очень схожих вызова ведут себя совершенно по разному
_FR> Во первых, твой код даже не скомпилится,
извиняюсь. под рукой нет ничего на чем можно проверить
Re[4]: Nullable & синтаксис
От: Tom Россия http://www.RSDN.ru
Дата: 21.04.09 13:32
Оценка:
_FR>Нет, не выглядит: с тем же успехом можно вызвать extension-метод, который может вернуть даже что-то осмысленное. Просто не нужно на этой мелочи заморачиваться, в ней ничего ни умного ни интересного нет.

Я думаю для переходящих с C/С++/Java оно будет не очень понятно до осознания value типов.
Народная мудрось
всем все никому ничего(с).
Re[4]: Nullable & синтаксис
От: Константин Л. Франция  
Дата: 21.04.09 13:38
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Tom, Вы писали:


Tom>>Как минимум выглядит это странно.

GZ>А 3.ToString() тоже выглядит странным?

при чем здесь это? неравнозначный пример
Re[5]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 21.04.09 13:39
Оценка: +3
Здравствуйте, Tom, Вы писали:

_FR>>Нет, не выглядит: с тем же успехом можно вызвать extension-метод, который может вернуть даже что-то осмысленное. Просто не нужно на этой мелочи заморачиваться, в ней ничего ни умного ни интересного нет.


Tom>Я думаю для переходящих с C/С++/Java оно будет не очень понятно до осознания value типов.


Зато сишники не удивятся тому, что
var x = new Y();

может вернуть null
Автор: _FRED_
Дата: 25.03.09
Так что статус кво присутствует

Для осознания value-типов и всего остального [нового] нужно впервую очередь отбросить предрассудки и внимательно ознакомится с литературой по предмету, а не то можно и на более неприятные косяки нелететь. Накладывать свой [старый] опыт на новое нужно очень осторожно. Зарвавшиеся являются сами себе буратинами.
Help will always be given at Hogwarts to those who ask for it.
Re[5]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 21.04.09 13:52
Оценка: +2 -2
Здравствуйте, Константин Л., Вы писали:

КЛ>при чем здесь это? неравнозначный пример

Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.
Re[6]: Nullable & синтаксис
От: Константин Л. Франция  
Дата: 21.04.09 14:11
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Константин Л., Вы писали:


КЛ>>при чем здесь это? неравнозначный пример

GZ>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.

да неужели?

null.ToString();



error CS0023: Operator '.' cannot be applied to operand of type '<null>'

Re[5]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 21.04.09 14:18
Оценка: 2 (1) -1 :))
Здравствуйте, cvetkov, Вы писали:

_FR>>Что я должен увидеть в сравнении?

C>то что два очень схожих вызова ведут себя совершенно по разному

Следующие два вызова ещё более похожи друг на друга

File.Delete(path); // 1
File.Create(path); // 2


однако и тут ведут себя (ну надо же!) не одинаково.

То, что "похожие" вещи ведут себя по-разному [уж тем более в нашем деле] является весьма и весьма распространённой ситуацией. Ключ к пониманию которой в том, что нужно _правильно_ (по _правильным_ параметрам, а не надуманным) определять, какие вещи "одинаковы" (в _чём_!), а какие нет. В данном конкретном случае ключом служат правила языка, и если их не понимать, то можно и в более простых вещах сесть в лужу.

Обсуждение же достоинств языка с позиции понятности-непонятности их любому новичку [в данном конкретном языке\технологии] могут завести в такие дебри, из которых уже будет не выбраться никому из участников.
Help will always be given at Hogwarts to those who ask for it.
Re[7]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 21.04.09 14:22
Оценка: +1 -1
Здравствуйте, Константин Л., Вы писали:

КЛ>>>при чем здесь это? неравнозначный пример

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.
Re[8]: Nullable & синтаксис
От: Константин Л. Франция  
Дата: 21.04.09 14:36
Оценка:
Здравствуйте, _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();

вместо
result += o1.ToString() + ... + o10.ToString();
Re[9]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 21.04.09 14:57
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>меня не удивляет, а смущает, что у "еще одного значения" разное поведение.

С чего ты взял что это у тебя значение? Ты предлагаешь чтобы такое компилировалось?
string s;
s.ToString();

Re[9]: Nullable & синтаксис
От: anton_t Россия  
Дата: 21.04.09 15:09
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, _FRED_, Вы писали:


_FR>>И что тебя удивляет? Что у "ещё одного значения" есть некоторые ограничения? Так они есть у любого значения: Например, у Math.PI нет метода "GetSomthing()".


А>Было бы круто, если бы разработчики сделали такую имплементацию: null.ToString(){return "";}.


А>Задолбало писать простыни


А>
А>if (!string.IsNullOrEmpty(o1))
А>    result += o1.ToString();
А>...
А>if (!string.IsNullOrEmpty(o10))
А>    result += o10.ToString();
А>

А>вместо
А>
А>result += o1.ToString() + ... + o10.ToString();
А>

Что-то ты путаешь. Даже такой код отработает без ошибок:
Console.WriteLine((string)null + null);

А если в твоём коде убрать совершенно лишние вызовы ToString, то и проврка на пустоту не нужна.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.