.Trim(), когда строка пуста или null

Я получаю некоторые данные от клиента в виде json. Я пишу это:

string TheText; // or whould it be better string TheText = ""; ?
TheText = ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim());

Если переменная, анализируемая из json, возвращается пустой, вызывает ли этот код сбой при вызове метода .Trim()?

Спасибо.

Ответ 1

Если сериализатор возвращает пустую строку, Trim ничего не сделает.

Если сериализатор возвращает null, вы получите NullReferenceException при вызове Trim.

Ваш код будет лучше написан (в отношении инициализации) следующим образом:

string theText = 
            ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim());

Нет смысла объявлять и инициализировать переменную и сразу назначать ей.

Следующее было бы безопаснее, если вы не знаете, что может потребоваться для сериализатора:

string theText = ((serializer.ConvertToType<string>(dictionary["TheText"])));

if(!string.IsNullOrEmpty(theText))
{
    theText = theText.Trim();
}

Ответ 2

Вызов Trim() в пустой строке приведет к пустой строке. Вызов Trim() на null будет бросать NullReferenceException

Ответ 3

Если у вас есть несколько полей, которые вы хотите обрезать, но вы получаете исключения для тех записей, у которых есть нули в определенных полях, то быстрый метод расширения будет самым простым:

public static class ExtensionMethods
    {
        public static string TrimIfNotNull(this string value)
        {
            if (value != null)
            {
                return value.Trim();
            }
            return null;
        }
    }

Пример использования:

string concatenated = String.Format("{0} {1} {2}", myObject.fieldOne.TrimIfNotNull(), myObject.fieldTwo.TrimIfNotNull(), myObject.fieldThree.TrimIfNotNull());

Ответ 4

Вы можете использовать оператор elvis:

GetNullableString()?.Trim(); // returns NULL or trimmed string

Ответ 5

  • Нет, было бы лучше инициализировать TheText на "". Вы назначаете это сразу после этого.

  • Нет, это не приведет к сбою - Trim() прекрасно работает с пустой строкой. Если под "пустым" вы подразумеваете, что он может быть нулевым, то да, он потерпит крах; вы могли бы иметь значение null, оставаясь нулевым, с помощью условно-нулевого вызова:

    string TheText =
        serializer.ConvertToType<string>(dictionary["TheText"])?.Trim();
    

Ответ 6

Как предложено в некоторых комментариях, теперь вы можете использовать С# 6 Null-условные операторы с этим синтаксисом:

string TheText = (serializer.ConvertToType<string>(dictionary["TheText"]))?.Trim();

Документация: https://msdn.microsoft.com/en-us/library/dn986595.aspx

Ответ 7

Некоторые основные приемы проверки строк на null перед тем, как обрезать:

  • (mystring?? "").Trim()
    "Нулевой оператор объединения" ?? вернет первый операнд. Только когда этот операнд имеет значение null, второй операнд будет возвращен (как вид значения по умолчанию).
    Приведенный выше пример вернет пустую строку, если mystring равно нулю.
  • mystring?.Trim()
    "Нулевой условный оператор" ? замкнет цепь операций в точечной нотации. Если операндом является ноль, следующие операции не будут выполнены, и ноль будет возвращен.
    Приведенный выше пример вернет значение null, если mystring равно null.
  • if( string.IsNullOrWhiteSpace(mystring) ) {... }
    метод IsNullOrWhiteSpace() может заменить обрезку, если вы действительно хотите проверить, есть ли в mystring реальный контент. Он возвращает истину, если операндом является ноль, пустой или ничего, кроме пробельных символов.

Ответ 8

Вы можете использовать этот код как beblow

 string theText = (((serializer.ConvertToType<string>(dictionary["TheText"])))+ string.Empty).Trim();

Ответ 9

Вы можете использовать нулевой безопасный оператор trim org.apache.commons.lang StringUtils.trim(stringOrNull)