Проверка пустой указатель перед ToString ()

PyPDF2 в некоторых случаях игнорирует пробелы и делает текст результата беспорядочным, но я использую PyMuPDF, и я действительно доволен, что вы можете использовать эту ссылку для получения дополнительной информации

75
задан Rex M 26 April 2009 в 16:44
поделиться

6 ответов

Обновите 8 лет спустя (ничего себе!) для покрытия c# 6's пустой условный оператор :

var value = maybeNull?.ToString() ?? String.Empty;

Другие подходы:

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

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

public static string ToSafeString(this object obj)
{
    return (obj ?? string.Empty).ToString();
}
121
ответ дан Jim Buck 7 November 2019 в 07:08
поделиться

При предназначении для Платформы.NET 3.5 самым изящным решением был бы дополнительный метод, по-моему.

public static class ObjectExtensions
{
    public static string NullSafeToString(this object obj)
    {
        return obj != null ? obj.ToString() : String.Empty;
    }
}

Затем для использования:

attribs.something = entry.Properties["something"].Value.NullSafeToString();
41
ответ дан Dale Ragan 7 November 2019 в 07:08
поделиться

Как изменение к ответу RexM:

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

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

1
ответ дан PhilChuang 7 November 2019 в 07:08
поделиться

Чтобы сделать точно, что Вы пытаетесь сделать, вспомогательный метод может всегда использоваться:

CopyIfNotNull(entry.Properties["something"].Value, out attribs.something);

void CopyIfNotNull(string src, out string dest)
{
  if(src != null)
    dest = src;
}
1
ответ дан Mike Hall 7 November 2019 в 07:08
поделиться

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

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)

0
ответ дан Zach Scrivena 7 November 2019 в 07:08
поделиться

Разве вы не можете сделать:

attribs.something = entry.Properties["something"].Value as string;
2
ответ дан 24 November 2019 в 11:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: