У меня есть набор строк, на которых я должен использовать.Trim (), но они могут быть пустыми. Это было бы намного более кратко, если я мог бы сделать что-то как:
string endString = startString !?? startString.Trim();
В основном возвратите часть справа, если часть слева НЕ является пустой, иначе просто возвратите нулевое значение. Я только что закончил тем, что использовал тернарный оператор, но должен там так или иначе использовать объединяющий пустой указатель оператор с этой целью?
Вы можете создать метод расширения, который возвращает null
, когда пытается обрезать значение.
public String TrimIfNotNull(this string item)
{
if(String.IsNullOrEmpty(item))
return item;
else
return item.Trim();
}
Обратите внимание, что вы не можете назвать это Trim, потому что методы расширения не могут переопределять методы экземпляра.
string endString = string.IsNullOrEmpty(startString) ? startString : startString.Trim();
Хотя я также пошел по пути написания метода расширения строки под названием «safeTrim», который выполняет то, что вы описываете в одном методе, вместо того, чтобы использовать этот рецепт каждый раз. Проверьте ответ Кевина , чтобы узнать код.
РЕДАКТИРОВАТЬ : вау, у меня были все виды обратных, ошибочно названных переменных и обратных тернарных операторов, и это еще одна причина написать один метод расширения и проверить его код лучше, чем у меня!
Использовать
string endString = (startString ?? "").Trim();
Использует пустую строку, если startString имеет значение NULL. Это, однако, не возвращает значение NULL, если endString
имеет значение NULL.
Следующий код не передает значение null, но принимает значение null в качестве параметра и в этом случае возвращает пустую строку.
using Microsoft.VisualBasic; // you need to add a reference to Microsoft.VisualBasic.dll
...
string endString = Strings.Trim(startString);
...
duck & run ...
В качестве примечания, если вы используете .NET 4, есть новый удобный метод String.IsNullOrWhiteSpace
, который вы можете использовать.
Не для спецификации: Не то, чтобы мне это нравилось, но вы могли бы использовать:
string endString = (startString ?? String.Empty).Trim();
Для спецификации, лучше в качестве метода расширения, например, @ Kevin's:
string endString = (startString == null ? null : startString.Trim());