Проверка на нулевое значение перед ToString () - PullRequest
74 голосов
/ 15 февраля 2009

Вот сценарий ...

if (entry.Properties["something"].Value != null)
  attribs.something = entry.Properties["something"].Value.ToString();

Хотя это эффективно и работает правильно, мне это кажется уродливым. Если я не проверяю нулевое значение перед выполнением ToString (), оно выдает исключение, если свойство имеет нулевое значение. Есть ли лучший способ справиться с этим сценарием?

Очень ценится!

Ответы [ 12 ]

1 голос
/ 15 февраля 2009

Как вариант ответа RexM:

attribs.something = (entry.Properties["something"].Value ?? attribs.something).ToString()

Единственным недостатком будет то, что attribs.something будет присвоено значение (само в этом примере), даже если entry.Properties ["нечто"]. Значение было равно нулю - что может быть дорого, если свойство .something сделало какая-то другая обработка и / или эта строка выполняет много (как в цикле).

0 голосов
/ 15 февраля 2009

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

attribs.something = getString(
    entry.Properties["something"].Value, 
    attribs.something);

static String getString(
    Object obj,
    String defaultString)
{
    if (obj == null) return defaultString;
    return obj.ToString();
}

В качестве альтернативы вы можете использовать оператор ??:

attribs.something = 
    (entry.Properties["something"].Value ?? attribs.something).ToString();

(обратите внимание на избыточный ToString() вызов при значении null)

...