[C# 3.0] Цепочка вызовов свойств и промежуточные null-ы
Console.WriteLine(Плохо, что получается скобочная запись, т.е. плохо, что у нас все закрывающие скобки скапливаются в самом конце выражения. потом в этих скобках черт ногу сломит.
new A.B.Get(x=>x.C.Get(x2=>x2.C001
);
лучше так:
new A.B.Get(x=>x.C).Get(x=>x.C001)для valuetype-ов лучше добавить:
public static T2? GetOrNull<T, T2>(this T t, Getter<T, T2> getter)
{
if (t == null)
return null;
return getter(t);
}
new A.B.Get(x=>x.C).Get(x=>x.C001)о спасибо , это совсем хорошо
(вчера ночью тоже подумал о таком, но показалось, что будет вызов метода у null-а, а оказалось все проще )
Плохо, что получается скобочная запись, т.е. плохо, что у нас все закрывающие скобки скапливаются в самом конце выражения. потом в этих скобках черт ногу сломит.ниче плохого не вижу. подсветку синтаксиса(и скобок в том числе) трусы придумали?
ниче плохого не вижу. подсветку синтаксиса(и скобок в том числе) трусы придумали?да что спорить плохо или нет, это просто не нужно , все так же работает и для записи -я . В той записи еще надо было переменные по разному обзывать x, x2, ...
если ты считаешь, что время у разработчика бесплатное, то ничего плохо конечно нет.
проблема в том, что даже если есть подсветка синтаксиса - то для того, чтобы понять где скобка начинается, а где заканчивается - нужно к каждой скобке мышку подвести.
не зря же в той же математической нотации, или в тех же конвейерах в C++: старались по максимуму убрать скобки на однотипных операциях.
зы
когда в коде написано что-нибудь такое:
Round(Mul(GetRange(items, 2 options.GetK(1 3)
хрен сходу поймешь, к какой именно функции все эти константы 2, 1, 3 - подходят.
запись того же самого в виде конвейера намного нагляднее
GetRange(items,2)
.Mul(options.GetK(1
.Round(3)
Оставить комментарий
6yrop
тут как-то писал о том, что неплохо бы иметь в языке возможность писать выраженияне проверяя каждый раз промежуточные объекты на null.
На мой взгляд, в C# 3.0 это выглядит уже вполне сносно
P.S. VS пока не ставил, набирал в блокноте и компилировал из командной строки