Как стать автором
Обновить

Комментарии 30

1) struct Some { }, var x = new Some();
а почему это должно работать? создаются два объекта, естественно, что у них будут разные адреса
хм… да, точно.
а вот Console.WriteLine("{0}", x == y); выведет True
тогда бы не было этюда )
таких объектов слишком много
я конечно на сисярпе не пишу, но моюет быть

var x = new Integer(1);
var y = new Integer(1);

?
value-type => будет false
Решение 1. Console.WriteLine(«True», object.ReferenceEquals(x, y)); //u r using std frmwork, ya!
Решение 2. Console.WriteLine("{0}", True); //YO DAWG I HEARD U LIKE TRUTH!
new string(' ', 0)
поздравляю, Вы нашли первое решение )
а существуют другие решения с «не-строками»? :-)
я знаю по крайней мере еще одно, строк оно не касается
ещё new System.Nullable()
парсер съел скобки:
new System.Nullable<int>()
да, правильно
Решили одновременно с goodbit
вот с Nullable понятно — этот ответ базируется на понимании CLR, а вот знания о String(' ', 0) — имхо бессмысленны :-)
потому как это специфичная оптимизация компилятора, не более
в CLR есть такая вещь как интернирование строк. это не опитимизация компилятора.
если использовать new string(' ', 1), это не будет работать
потому замечание вполне резонное
пардон. тут не интернирование.
просто конструктор
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern String(char c, int count);
при равенстве второго аргумента нулю возвращает ссылку на String.Empty

Но компилятор тут опять же непричём, всё дело с clr.
НЛО прилетело и опубликовало эту надпись здесь
да, с этим я согласен
но для полноты задачи я должен был указать, что знаю два решения
угу :-) подобные задачи обычно носят спортивный подтекст :-) сама задача, безусловно — хорошая и полезная. хотим ещё :-)
уже было выше
var x = new Nullable();
var y = new Nullable();
Console.WriteLine("{0}", ReferenceEquals(x, y));
Извините,
var x = new Nullable();
var y = new Nullable();
Console.WriteLine("{0}", ReferenceEquals(x, y));
Хмм… в после Nullable должны были быть угловые скобки с шаблоном. Но они не про печатались.
хех, одновременно # ;)
var x = new T(...) ? null : null;
var y = new T(...) ? null : null;


=)
вы нарушаете одно из условий )
«В x и y сохраняется ровно то значение, которое вернул оператор new. „
Сначала подумал о нарушении и в случае Nullable. Ошибся. Не то значение лишь попадает в ReferenceEquals.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории