Несмотря на то, что уже на подходе 4-ая версия языка C#, до сих пор не хватает следующей возможности (на данный момент, такое невозможно сделать даже самому)
Не хватает "красивой" работы с нулевыми
значениями
сейчас вместо:
|
if (Root.Config.User.Age > 16)
{
//bla-bla
}
|
часто приходиться писать:
|
int? age = null;
var root = Root;
if (root != null)
{
var config = root.Config;
if (config != null)
{
var user = config.User;
if (user != null)
age = user.Age;
}
}
if (age != null && age.Value > 10)
{
//bla-bla
}
|
т.е. хочеться иметь оператор вида
'.?', который возвращает нуль, если левая часть имеет нулевое значение
|
if (Root.?Config.?User.?Age > 16)
{
//bla-bla
}
|
или может даже лучше:
|
if (Root?.Config?.User?.Age > 16)
{
//bla-bla
}
|
Особенно это нужно при описании
правил бизнес логики, т.к. в бизнес-логики часто мы имеем на руках только
частичную информацию о мире
зы
более формальное определение:
конструкция вида <object>?.<member> ведет себя следующим образом:
1. если <object> != null, то равносильна конструкции <object>.<member>
2. если <object> == null, то <member> не вызывается, а значение выражения становится null
3. общий результирующий тип выражения такое же как у <object>.<member>, за исключением value-типов, для которых тип выражения будет Nullable<тип>