функция для проверки пустой строки / свойства? - PullRequest
1 голос
/ 20 октября 2011

У меня есть объект со свойствами (строки). Пример: объект пациента с весом, ростом.

Но когда свойство имеет значение null, мой код завершается ошибкой, когда я пытаюсь его использовать, так как для свойства установлено значение null. Итак, что я пытаюсь сделать, это создать функцию, которая проверяет, является ли строка / свойство нулевым, и если да, установить для свойства значение "".

Я знаю, что могу сделать одно из следующих: if (string.isNullOrEmpty (Patient.weight)) Patient.weight = "";

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

Может кто-нибудь дать мне подсказку :(?

Ответы [ 10 ]

5 голосов
/ 20 октября 2011

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

private string _Name = string.Empty;
public string Name
{
    get
    {
        return _Name;
    }
    set
    {
        _Name = value ?? string.Empty;
    }
}

Однако вам, вероятно, нужен оператор ??, также известный как оператор нуль-слияния , который использовался выше, в основном это выражение:

x = y ?? z;

означает то же самое, что и это:

if (y != null)
    x = y;
else
    x = z;

и это тоже не совсем верно. В приведенном выше примере y вычисляется дважды, что не происходит с оператором ??, поэтому лучшим приближением будет следующее:

var temp = y;
if (temp != null)
    x = temp;
else
    x = z;
2 голосов
/ 20 октября 2011

Вы можете сделать myString ?? string.Empty, что даст вам строку или строку. Пусто, если оно равно нулю.

2 голосов
/ 20 октября 2011

Используйте оператор слияния нуль:

string s = Patient.Name ?? string.Empty;

Поэтому, если Patient.Name равно нулю, то s будет установлено в пустую строку.

2 голосов
/ 20 октября 2011

Как то так?

public string EmptyIfNull(string value) 
{
    return value ?? String.Empty;
}
2 голосов
/ 20 октября 2011

Ну, оператор объединения нулей звучит так, будто это ваш друг здесь:

string text = patient.Name ?? "";

Вы могли бы написать метод расширения, чтобы сделать то же самое, но я думаю, что оператор может оказаться более читабельным.

Обратите внимание, что это не будет устанавливать свойство - но это не то, что вы говорите, что хотите в любом случае, в предложении:

В идеале, я хотел бы иметь функцию, которая может принимать строку (без сбоев, даже если она равна нулю) и просто возвращать либо значение (если оно не равно нулю), либо "", если оно равно нулю .

Это именно то, что делает код выше.

1 голос
/ 20 октября 2011

Я не уверен, что то, что вы спрашиваете, является лучшим решением для вас. Если каждый раз, когда вы не хотите проверять String и возвращать "", если это null, я бы посоветовал вместо этого инициализировать ваши поля String как "".

private String height = "";

вместо

private String height;

Кстати, вы должны хранить такие значения, как height и weight как Double, а не String, если только у вас нет веских причин не делать это.

1 голос
/ 20 октября 2011

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

string a = null;
a = a ?? "womble";
// a now has the value "womble"

string b = "fluff";
b = b ?? "cabbage";
// b wasn't null, so it still has the value "fluff"
0 голосов
/ 20 октября 2011

Вы можете взять идею @Jon на шаг вперед, чтобы вам не пришлось беспокоиться об использовании ??везде:

Определите ваши методы доступа следующим образом:

private String m_name = null;
public String Name
{
    get { return m_name ?? String.Empty; }
    set { m_name = value; }
}

Везде, где вы обращаетесь к свойству Name, оно будет выполнять для вас нулевой оператор объединения.

0 голосов
/ 20 октября 2011

Если Вес и Высота являются целыми числами, они не могут быть нулевыми.Если ваш объект null и вы пытаетесь получить Рост из Вес нулевого объекта, то ваш код просто неверен.Если строка равна нулю, то она напечатает нулевой символ.

Следующее очень элегантно:

if ( String.isNullOrEmpty(patient.weight) )
{
//DO STUFF HERE
}
else
{
//DO OTHER STUFF HERE
}

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

Если вы используете isNullOrEmpty , то делать следующее бессмысленно.

patient.weight = "";

Примечание автора

Iдумаю, я не понимаю причину, по которой строка, являющаяся нулевой, вызовет проблему.Пункты об установке значения в пустую строку при инициализации, конечно, действительны.

0 голосов
/ 20 октября 2011

Скажите привет оператору null coalescing .

...