строка. IsNullOrEmpty () по сравнению со строкой. NotNullOrEmpty ()

Существует несколько решений, которые вы можете применять в зависимости от деталей ваших проектов.

Как я понимаю, вы используете Bot Framework SDK без каких-либо дополнительных действий. Базовый Nuget написан на .NET Standard 2.0, который может использоваться как в dotNet Core, так и в dotNet Framework. Таким образом, самый простой способ - это обновить / изменить ваш проект для компиляции на dotNet Framework вместо dotNet Core. Тогда вы можете без проблем ссылаться на второй проект.

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

  1. Создать для процессов на той же машине отправить «сообщения» между ними (один из файл, как вы упомянули, второй - HTTP-запросы, третий - очереди и многое другое ...) - Я могу предоставить более подробную информацию, если я знаю, как вы хотите разместить свое решение
  2. Попробуйте перенести проект QlikSense в dotNet Core. , Проверить легкость миграции можно с помощью официального руководства: https://docs.microsoft.com/en-us/dotnet/core/porting/third-party-deps и этого сообщения: https://www.stevejgordon.co.uk/migrating-full-net-framework-net-core
  3. Найдите другую библиотеку для QlikSense, если вы хотите остаться с dotnet Core
  4. [115 ]

28
задан Chris S 9 April 2009 в 02:58
поделиться

13 ответов

Because "IsNullOrEmpty" is easier to understand than "NotNullOrEmpty". The latter could be interpreted as:

  1. It's not null and it's not empty
  2. It's not null or it is empty
59
ответ дан Tim Cooper 20 November 2019 в 01:50
поделиться

Двойные негативы обычно не рекомендуются при именовании. ! String.NotNullOrEmpty (...) сделает его одним.

36
ответ дан Mehrdad Afshari 20 November 2019 в 01:50
поделиться

Для этих логиков,! String.IsNullOrEmpty не эквивалентно string.IsNotNullOrEmpty. @ Гуффа это правильно. Используя закон Деморгана, он должен быть строкой. IsNotNullAndNotEmpty должен быть эквивалентным.

¬ (null ∨ empty) ⇔ ¬null ∧ ¬empty

¬ (null ∨ empty) ≠ ¬null ∨ empty

Точка здесь, я полагаю, дело в том, что то, как это происходит в настоящее время, является однозначным, тогда как создание противоположности однозначно было бы громоздким.

12
ответ дан tvanfosson 20 November 2019 в 01:50
поделиться

Соглашения об именах в C # диктуют, что ваши выражения должны быть положительными, например "Is ... "а не" IsNot ... "

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

if (string) .IsNullOrEmpty (myParameter))
{
бросить новый ....
}

6
ответ дан Erich Mirabal 20 November 2019 в 01:50
поделиться

Так же, как примечание, я предпочитаю метод расширения:

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

Я считаю, что лучше читать: 1295] или

if(!myValue.IsNullOrEmpty())
6
ответ дан Brian Genisio 20 November 2019 в 01:50
поделиться

Это наиболее распространенное использование, которое я видел.

1
ответ дан John Kraft 20 November 2019 в 01:50
поделиться

Лично я предпочитаю учитывать неотрицательный сценарий первый. Для меня имеет смысл сначала сделать правду, а потом ложь. Все сводится к личному стилю.

0
ответ дан uriDium 20 November 2019 в 01:50
поделиться

Я всегда думал, что это неправильно, поскольку я использую негатив гораздо чаще, чем позитив.

Я также хотел бы, чтобы был экземпляр IsEmpty () или IsNotEmpty () для использования, когда переменная объявлена ​​внутри функции. Это не может быть IsNullOrEmpty () или IsNotNullOrEmpty (), как если бы экземпляр был нулевым, тогда вы получите исключение нулевой ссылки.

0
ответ дан stevehipwell 20 November 2019 в 01:50
поделиться

Perhaps because then the name would have to be the lengthy IsNotNullAndNotEmpty to be as specific.

4
ответ дан Guffa 20 November 2019 в 01:50
поделиться

«NotNullOrEmpty» является неоднозначным, оно может означать «(не ноль) или пусто» или может означать «нет ( нулевой или пустой). Чтобы сделать его недвусмысленным, вы должны использовать NotNullAndNotEmpty, что является ругательством.

Кроме того, именование IsNullOrEmpty поощряет использование в качестве защитного предложения, что я считаю полезным. Например:

if (String.IsNullOrEmpty(someString))
{
   // error handling
   return;
}
// do stuff

, который, я думаю, в целом чище, чем:

if (!String.IsNullOrEmpty(someString))
{
   // do stuff
}
else
{
   // error handling
   return;
}
1
ответ дан Wedge 20 November 2019 в 01:50
поделиться

Пару лет назад я написал статью о восстановлении номеров строк и столбцов в ошибках ANTLR, которая могла бы быть полезной.

http://tech.puredanger.com/2007/02/01/recovering-line-and-column-numbers-in-your-antlr-ast/

-121--4435104-

У вас в основном есть две опции: eiter абстрагирует всю логику, связанную с файловой системой, за IFileSystemService , или использует Stubs от Microsoft, что является

... облегченной структурой для .NET, которая обеспечивает тестовые заглушки. Для интерфейсов и незапечатанных классов создаются оболочки типа, которые можно легко настроить путем присоединения делегатов.

-121--3329676-

Я на самом деле склонен предложить другой ответ, чем «это неоднозначное» объяснение, предоставленное несколькими другими (хотя я согласен и с этим ответом):

Лично мне нравится минимизировать вложенность в мой код, как (по мне) чем более кудрявый код скобок, тем труднее ему становится следовать.

Поэтому я бы предпочел это (например):

public bool DoSomethingWithString(string s) {
    if (string.IsNullOrEmpty(s))
        return false;

    // here's the important code, not nested
}

этому:

public bool DoSomethingWithString(string s) {
    if (!string.IsNullOrEmpty(s)) {
        // here's the important code, nested
    } else {
        return false;
    }
}

Это довольно специфический сценарий (где нулевой / пустой ряд подсказывает немедленный выход) и явно не то, как метод, использующий IsStartOrEmpty , всегда будет структурирован; Но я думаю, что это довольно часто.

1
ответ дан 20 November 2019 в 01:50
поделиться

Я всегда создаю метод расширения для «HasContent ()», который в целом имеет смысл, следует «положительным» спецификациям и экономит на раздувании кода, потому что я использую он гораздо чаще, чем его аналог:

public static bool HasContent(this string s) {
    return !string.IsNullOrEmpty(s);
}
5
ответ дан 20 November 2019 в 01:50
поделиться

Конечно, вы всегда можете использовать string.IsNullOrWhiteSpace(string) сейчас вместо string .IsNullOrEmpty(string) из .NET 4.0

2
ответ дан 20 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

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