Подтвердить что ты не робот

IsNullOrEmptyOrWhiteSpace отсутствует

Я определяю строку и проверяю ее на string.IsNullOrEmptyOrWhiteSpace().

Но я получил эту ошибку:

'string' не содержит определения для 'IsNullOrEmptyOrWhiteSpace', и не может быть найден метод расширения 'IsNullOrEmptyOrWhiteSpace', принимающий первый аргумент типа 'string' (вам не хватает директивы using или ссылки на сборку?) D:\project\project\Controllers\aController.cs 23 24 project

В чем причина?

4b9b3361

Ответ 1

String.IsNullOrWhiteSpace был представлен в .NET 4. Если вы не нацеливаете .NET 4, вы можете легко написать свой собственный:

public static class StringExtensions
{
    public static bool IsNullOrWhiteSpace(string value)
    {
        if (value != null)
        {
            for (int i = 0; i < value.Length; i++)
            {
                if (!char.IsWhiteSpace(value[i]))
                {
                    return false;
                }
            }
        }
        return true;
    }
}

который можно использовать следующим образом:

bool isNullOrWhiteSpace = StringExtensions.IsNullOrWhiteSpace("foo bar");

или как метод расширения, если вы предпочитаете:

public static class StringExtensions
{
    public static bool IsNullOrWhiteSpace(this string value)
    {
        if (value != null)
        {
            for (int i = 0; i < value.Length; i++)
            {
                if (!char.IsWhiteSpace(value[i]))
                {
                    return false;
                }
            }
        }
        return true;
    }
}

который позволяет использовать его напрямую:

bool isNullOrWhiteSpace = "foo bar".IsNullOrWhiteSpace();

Для использования метода расширения убедитесь, что пространство имен, в котором установлен статический класс StringExtensions, находится в области видимости.

Ответ 2

Вот еще одна альтернативная реализация, просто для удовольствия. Вероятно, он не будет работать так же хорошо, как и Darin's, но это хороший пример LINQ:

public static class StringExtensions
{
    public static bool IsNullOrWhiteSpace(this string value)
    {
        return value == null || value.All(char.IsWhiteSpace);
    }
}

Ответ 4

Я использовал (в .NET v2.0):

public static class StringExtensions
{
    public static bool IsNullOrEmptyOrWhitespace(this string value)
    {
        return string.IsNullOrEmpty(value) || string.IsNullOrEmpty(value.Trim());
    }
}

Метод Trim() удалит все ведущие или завершающие пробелы, поэтому, если ваша строка полностью пробельная, она будет уменьшена до пустой строки.

Я не могу сказать, что производительность была проблемой.

Ответ 5

Забавно, что никто не использует функцию Trim здесь:

public static class StringExtensions
{
    public static bool IsNullOrEmptyOrWhiteSpace(this string value)
    {
        return string.IsNullOrEmpty(value) ||
               ReferenceEquals(value, null) ||
               string.IsNullOrEmpty(value.Trim(' '));
    }
}

Обновление: Я вижу в комментариях, что теперь это было предложено и отклонено по разным причинам, но там, если кто-то предпочитает краткость по эффективности...

Ответ 6

Точная копия из исходного кода Microsoft для .NET 4 Framework,..\RefSrc\Source.Net\4.0\DEVDIV_TFS\Dev10\Releases\RTMRel\ndp\clr\src\BCL\System\String.cs\1305376\String.cs

    public static bool IsNullOrEmpty(String value) {
        return (value == null || value.Length == 0); 
    }

    public static bool IsNullOrWhiteSpace(String value) {
        if (value == null) return true; 

        for(int i = 0; i < value.Length; i++) { 
            if(!Char.IsWhiteSpace(value[i])) return false; 
        }

        return true;
    }

Примечания

(из http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx)

IsNullOrWhiteSpace - метод удобства, аналогичный следующему коду, за исключением того, что он обеспечивает превосходную производительность:

return String.IsNullOrEmpty(value) || value.Trim().Length == 0;

Символы белого пространства определяются стандартом Unicode. Метод IsNullOrWhiteSpace интерпретирует любой символ, возвращающий значение true, когда он передается методу Char.IsWhiteSpace в качестве символа пробела.

Ответ 7

Pre.NET 4.0, кратчайший:

public static bool IsNullOrWhiteSpace(this string value)
{
    return value == null || value.Trim() == "";
}

Неэффективно; Джон лучше рассматривает читаемость и производительность.