IsNullOrEmptyOrWhiteSpace отсутствует
Я определяю строку и проверяю ее на string.IsNullOrEmptyOrWhiteSpace()
.
Но я получил эту ошибку:
'string' не содержит определения для 'IsNullOrEmptyOrWhiteSpace', и не может быть найден метод расширения 'IsNullOrEmptyOrWhiteSpace', принимающий первый аргумент типа 'string' (вам не хватает директивы using или ссылки на сборку?) D:\project\project\Controllers\aController.cs 23 24 project
В чем причина?
Ответы
Ответ 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);
}
}
Ответ 3
Может быть, IsNullOrWhiteSpace
- метод, который вы ищете? http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
Ответ 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() == "";
}
Неэффективно; Джон лучше рассматривает читаемость и производительность.