Что такое хороший синтаксис в C # для «Если foo не нуль, вернуть свойство его, в противном случае ноль» - PullRequest
3 голосов
/ 16 ноября 2011

В моем небольшом фрагменте кода ниже у меня есть класс-оболочка для простого динамического объекта, который, когда он не равен NULL, может получить доступ к двум свойствам: «id» и «name». Это объект Facebook, для тех, кто играет дома.

В любом случае, в моём аксессоре GET вы можете видеть, что я должен проверить, был ли заданный мной динамический объект нулевым, так как ссылка на динамическое свойство в нулевой ссылке будет AV. Но так как я, вероятно, примерно миллионный человек, чтобы сделать это, я предполагаю, что есть более лаконичный и элегантный способ выразить это.

Пожалуйста, просветите меня, о великие мудрецы. Спасибо!

public class IdNamePair
{
    private dynamic _data;
    public IdNamePair(dynamic data)
    {
        _data = data;
    }
    public string Id
    {
        get
        {
            return (_data == null) ? null : _data.id;
        }
    }
    public string Name
    {
        get
        {
            return (_data == null) ? null :_data.name;
        }
    }
}

Ответы [ 3 ]

6 голосов
/ 16 ноября 2011

Нет ничего плохого в том, что вы сделали, единственное, что я хотел бы сделать, это снять скобки и изменить оценку:

return _data != null ? _data.name : null;

Делать это таким образом (IMVHO) немного легче для чтения, но по сути идентично тому, что вы имели.

0 голосов
/ 16 ноября 2011

Использование кода, который у вас уже есть, скорее всего, лучшее решение. Но если вы хотите, вы можете создать такой метод расширения:

public static TResult Select<T, TResult>(this T obj, Func<T, TResult> func)
    where T : class
    where TResult : class
{
    return obj == null ? null : func(obj);
}

и используйте его так:

public string Id
{
    get
    {
        return _data.Select(d => d.id);
    }
}

Но это сделает код менее читабельным для большинства людей. И этот метод, возможно, должен иметь лучшее название.

Делая это, в основном обрабатывает обнуляемые ссылочные типы как Возможно, монада .

0 голосов
/ 16 ноября 2011

Нет, это в значительной степени так, как вы должны это сделать.Думаю, ты умнее, чем ты думал :) 1001 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...