Существует несколько решений, которые вы можете применять в зависимости от деталей ваших проектов.
Как я понимаю, вы используете Bot Framework SDK без каких-либо дополнительных действий. Базовый Nuget написан на .NET Standard 2.0, который может использоваться как в dotNet Core, так и в dotNet Framework. Таким образом, самый простой способ - это обновить / изменить ваш проект для компиляции на dotNet Framework вместо dotNet Core. Тогда вы можете без проблем ссылаться на второй проект.
Если есть больше компиляций, которые я не знаю, вы можете сделать одно из следующих решений:
Because "IsNullOrEmpty" is easier to understand than "NotNullOrEmpty". The latter could be interpreted as:
Двойные негативы обычно не рекомендуются при именовании. ! String.NotNullOrEmpty (...)
сделает его одним.
Для этих логиков,! String.IsNullOrEmpty не эквивалентно string.IsNotNullOrEmpty. @ Гуффа это правильно. Используя закон Деморгана, он должен быть строкой. IsNotNullAndNotEmpty должен быть эквивалентным.
¬ (null ∨ empty) ⇔ ¬null ∧ ¬empty
¬ (null ∨ empty) ≠ ¬null ∨ empty
Точка здесь, я полагаю, дело в том, что то, как это происходит в настоящее время, является однозначным, тогда как создание противоположности однозначно было бы громоздким.
Соглашения об именах в C # диктуют, что ваши выражения должны быть положительными, например "Is ... "а не" IsNot ... "
РЕДАКТИРОВАТЬ: Как правило, я использую его при выполнении проверки ошибок и проверки ввода в начале метода и выдает исключение, если параметр является нулевым или пустым.
if (string) .IsNullOrEmpty (myParameter))
{
бросить новый ....
}
Так же, как примечание, я предпочитаю метод расширения:
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string value)
{
return string.IsNullOrEmpty(value);
}
}
Я считаю, что лучше читать: 1295] или
if(!myValue.IsNullOrEmpty())
Это наиболее распространенное использование, которое я видел.
Лично я предпочитаю учитывать неотрицательный сценарий первый. Для меня имеет смысл сначала сделать правду, а потом ложь. Все сводится к личному стилю.
Я всегда думал, что это неправильно, поскольку я использую негатив гораздо чаще, чем позитив.
Я также хотел бы, чтобы был экземпляр IsEmpty () или IsNotEmpty () для использования, когда переменная объявлена внутри функции. Это не может быть IsNullOrEmpty () или IsNotNullOrEmpty (), как если бы экземпляр был нулевым, тогда вы получите исключение нулевой ссылки.
Perhaps because then the name would have to be the lengthy IsNotNullAndNotEmpty
to be as specific.
«NotNullOrEmpty» является неоднозначным, оно может означать «(не ноль) или пусто» или может означать «нет ( нулевой или пустой). Чтобы сделать его недвусмысленным, вы должны использовать NotNullAndNotEmpty, что является ругательством.
Кроме того, именование IsNullOrEmpty поощряет использование в качестве защитного предложения, что я считаю полезным. Например:
if (String.IsNullOrEmpty(someString))
{
// error handling
return;
}
// do stuff
, который, я думаю, в целом чище, чем:
if (!String.IsNullOrEmpty(someString))
{
// do stuff
}
else
{
// error handling
return;
}
Пару лет назад я написал статью о восстановлении номеров строк и столбцов в ошибках ANTLR, которая могла бы быть полезной.
http://tech.puredanger.com/2007/02/01/recovering-line-and-column-numbers-in-your-antlr-ast/
-121--4435104- У вас в основном есть две опции: eiter абстрагирует всю логику, связанную с файловой системой, за IFileSystemService
, или использует Stubs от Microsoft, что является
-121--3329676-... облегченной структурой для .NET, которая обеспечивает тестовые заглушки. Для интерфейсов и незапечатанных классов создаются оболочки типа, которые можно легко настроить путем присоединения делегатов.
Я на самом деле склонен предложить другой ответ, чем «это неоднозначное» объяснение, предоставленное несколькими другими (хотя я согласен и с этим ответом):
Лично мне нравится минимизировать вложенность в мой код, как (по мне) чем более кудрявый код скобок, тем труднее ему становится следовать.
Поэтому я бы предпочел это (например):
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
, всегда будет структурирован; Но я думаю, что это довольно часто.
Я всегда создаю метод расширения для «HasContent ()», который в целом имеет смысл, следует «положительным» спецификациям и экономит на раздувании кода, потому что я использую он гораздо чаще, чем его аналог:
public static bool HasContent(this string s) {
return !string.IsNullOrEmpty(s);
}
Конечно, вы всегда можете использовать string.IsNullOrWhiteSpace(string)
сейчас вместо string .IsNullOrEmpty(string)
из .NET 4.0