Инвертируйте объединяющий пустой указатель оператор

У меня есть набор строк, на которых я должен использовать.Trim (), но они могут быть пустыми. Это было бы намного более кратко, если я мог бы сделать что-то как:

string endString = startString !?? startString.Trim();

В основном возвратите часть справа, если часть слева НЕ является пустой, иначе просто возвратите нулевое значение. Я только что закончил тем, что использовал тернарный оператор, но должен там так или иначе использовать объединяющий пустой указатель оператор с этой целью?

14
задан jhunter 17 May 2010 в 21:17
поделиться

6 ответов

Вы можете создать метод расширения, который возвращает null , когда пытается обрезать значение.

public String TrimIfNotNull(this string item)
{
   if(String.IsNullOrEmpty(item))
     return item;
   else
    return item.Trim();
}

Обратите внимание, что вы не можете назвать это Trim, потому что методы расширения не могут переопределять методы экземпляра.

12
ответ дан 1 December 2019 в 09:01
поделиться
string endString = string.IsNullOrEmpty(startString) ? startString : startString.Trim();

Хотя я также пошел по пути написания метода расширения строки под названием «safeTrim», который выполняет то, что вы описываете в одном методе, вместо того, чтобы использовать этот рецепт каждый раз. Проверьте ответ Кевина , чтобы узнать код.

РЕДАКТИРОВАТЬ : вау, у меня были все виды обратных, ошибочно названных переменных и обратных тернарных операторов, и это еще одна причина написать один метод расширения и проверить его код лучше, чем у меня!

4
ответ дан 1 December 2019 в 09:01
поделиться

Использовать

string endString = (startString ?? "").Trim();

Использует пустую строку, если startString имеет значение NULL. Это, однако, не возвращает значение NULL, если endString имеет значение NULL.

1
ответ дан 1 December 2019 в 09:01
поделиться

Следующий код не передает значение null, но принимает значение null в качестве параметра и в этом случае возвращает пустую строку.

using Microsoft.VisualBasic;  // you need to add a reference to Microsoft.VisualBasic.dll

    ...
    string endString = Strings.Trim(startString);
    ...

duck & run ...

0
ответ дан 1 December 2019 в 09:01
поделиться

В качестве примечания, если вы используете .NET 4, есть новый удобный метод String.IsNullOrWhiteSpace , который вы можете использовать.

0
ответ дан 1 December 2019 в 09:01
поделиться

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

string endString = (startString ?? String.Empty).Trim();

Для спецификации, лучше в качестве метода расширения, например, @ Kevin's:

string endString = (startString == null ? null : startString.Trim());
12
ответ дан 1 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

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