Делает.NET, имеют способ разрешить пустую строку для Строкового представления. Пустой?

При использовании Swing , Swing ФЕСТИВАЛЯ полезен для управления GUI и тестирования утверждений. Это делает его довольно простым для тестирования вещей как , "если я нажимаю кнопку, диалоговое окно B должно быть отображено" или , "если я выбираю опцию 2 из выпадающего, все флажки должны стать невыбранными" .

сценарий графика, который Вы упоминаете, не настолько легко протестировать. Довольно легко получить покрытие кода для компонентов графического интерфейса пользователя только путем создания и отображения их (и возможно управления ими с ФЕСТИВАЛЕМ). Однако создание значимых утверждений является твердой частью (и покрытие кода без значимых утверждений является упражнением в самообмане). Как Вы тестируете это, график не был оттянут вверх тормашками или слишком маленький?

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

6
задан BenAlabaster 6 August 2009 в 21:00
поделиться

10 ответов

Единственный способ увидеть его полезность - это использовать статический метод в строковом классе, потому что, очевидно, он не могут быть отнесены к экземпляру, поскольку этот экземпляр имеет значение NULL, и это может вызвать ошибку времени выполнения.

Методы расширения C # 3.0 могут вызываться на приемниках NULL (поскольку на практике они статичны), но ведут себя как методы экземпляра. Так что просто сделайте это методом расширения.

6
ответ дан 8 December 2019 в 02:19
поделиться

Я не думаю, что для этого есть что-нибудь встроенное. Моя первая мысль, и то, что я делаю часто, - это использовать оператор объединения:

string s = null;
string x = s ?? string.Empty;
24
ответ дан 8 December 2019 в 02:19
поделиться

someExpressionInvolving (s ?? "");

Нет смысла волноваться по поводу string.Empty vs "" - есть незначительная разница:

Console.WriteLine(ReferenceEquals(string.Empty, "")); // true
4
ответ дан 8 December 2019 в 02:19
поделиться

Метод расширения:

public static class StringExtensions
{
    public static String EmptyIfNull(this String instance)
    {
        return instance ?? String.Empty;
    }
}

конечно, вы можете так же легко написать экземпляр ?? String.Empty там, где вам нужно использовать String.Empty вместо null.

3
ответ дан 8 December 2019 в 02:19
поделиться
string test = CouldReturnNull() ?? string.Empty;
1
ответ дан 8 December 2019 в 02:19
поделиться

Вы можете использовать ?? Оператор (оператор объединения с нулем) в C # - это вы имеете в виду? Или я неправильно понял?

например.

string n = null;
string y = n ?? String.Empty;

y would = String.Empty;

1
ответ дан 8 December 2019 в 02:19
поделиться

Я бы сказал, что реализация этого метода расширения будет немного похожа на то, что мы в Швеции называем «путешествовать на другую сторону ручья за водой» . Когда мне нужно убедиться, что я получаю пустую строку вместо нуля, я часто просто объединяю ее с string.Empty :

public void SomeMethod(string param)
{
    string notNull = param + string.Empty;
}

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

0
ответ дан 8 December 2019 в 02:19
поделиться
string abc = s ?? string.Empty;
1
ответ дан 8 December 2019 в 02:19
поделиться

Для этого нет встроенной функции. Но вы можете написать небольшой метод расширения (или статический метод) для строкового типа с такой инструкцией, как:

return s ?? string.Emtpy;

0
ответ дан 8 December 2019 в 02:19
поделиться

Просто добавьте string.Empty в любую строковую переменную, и вы гарантированно никогда не получите null

string a = null;
string b = null + string.Empty;
string c = "a" + string.Empty;

(a == string.Empty).Dump(); // False
(b == string.Empty).Dump(); // True
(c == "a").Dump(); // True

Я добавил это в LinqPad, отсюда .Dump ()

Глядя на ваши варианты ...

Этот метод

string b = null + string.Empty;

генерирует

IL_0001:  ldsfld      System.String.Empty
IL_0006:  dup         
IL_0007:  brtrue.s    IL_000F
IL_0009:  pop         
IL_000A:  ldstr       ""
IL_000F:  stloc.0     

Другой популярный вариант:

string b = null ?? string.empty

генерирует

IL_0001:  ldsfld      System.String.Empty
IL_0006:  stloc.0     

и этот

string b = null + "";

генерирует это

IL_0001:  ldstr       ""
IL_0006:  stloc.0     

Я все еще предпочитаю

string b = null + "";

Но на самом деле, ИМО,

0
ответ дан 8 December 2019 в 02:19
поделиться