2014-11-05 2 views
1

У меня есть фрагмент кода ниже того, с которым я пытаюсь работать.Строки, десятичные разряды и нуль в C#

decimal preTestAir = decimal.Parse(AirPreTestTextBox.Value); 

preTestAir является decimal и должен оставаться decimal для отправки в базу данных. Это не может измениться. То, что я пытаюсь сделать, это определить, является ли AirPreTestTextBox.Value нулевым, назначить ему значение decimal0.00, а затем присвоить его decimalpreTestAir. Приведенный выше код отлично работает, если в текстовом поле есть некоторое числовое значение. Что делать, если в текстовом поле нет значения? Приложение аварийно завершает работу. Как определить, имеет ли значение AirPreTestTextBox.Value значение null, и присвоить значение, если оно находится в одной строке? Причина для одной строки состоит в том, что у меня есть почти 100 строк кода, которые нужно отформатировать таким образом. Я пробовал использовать такие операторы, как ??, которые не будут работать с десятичными знаками, которые не являются типом NULL. Может ли кто-нибудь помочь? Любая помощь приветствуется!

ответ

4

Простая установка с тройной.

decimal preTestAir = String.IsNullOrEmpty(AirPreTestTextBox.Value) ? 0 : decimal.Parse(AirPreTestTextBox.Value); 

Его очень маловероятно, что текстовое поле будет держать null строку, ее гораздо более вероятно, что ее пустой.

+0

Это сработало, когда я сменил 0.00 на 0. Спасибо! –

+0

@GreenDeveloper '0,00' - это' double', а не 'decimal'. И '0' - это' int', но ints неявно конвертируются в тип 'decimal'. Вы можете использовать '0m',' 0.0m' или '0.00m'. 'M' для' decimal'. Количество конечных нулей имеет значение, но в зависимости от вашего использования вы, вероятно, можете использовать любой из них. Int '0' становится десятичным' 0m' без конечных нулей. –

4

Вы можете просто использовать условный оператор:

decimal preTestAir = AirPreTestTextBox.Value == null ? 
        0.0m : 
        decimal.Parse(AirPreTestTextBox.Value); 
+0

Замечательным !!! Спасибо! Я отвечу, когда это позволит. –

+0

На самом деле, это бросило мне эту ошибку. Имеет ли это смысл? Исключение типа «System.FormatException» произошло в mscorlib.dll, но не было обработано в коде пользователя Дополнительная информация: строка ввода не была в правильном формате. –

4

Нулевая оператор коалесцирующий (??) является вашим другом здесь. Использовать

(AirPreTestTextBox.Value ?? "0.00") 
1

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

decimal preTestAir; 
if(!deciaml.TryParse(AirPreTestTextBox.Value, out preTestAir)) 
{ 
    // handle the fact it couldn't convert if you like... 
}