Я читаю некоторый текст из входного файла, разделяю его на соответствующие столбцы, а затем пытаюсь преобразовать эти столбцы в правильный тип данных. Для столбца 2 / корректировки цены важно, чтобы, когда выходные данные столбца были нулевыми, это были выходные данные. Целевой столбец может законно содержать 0 или отрицательные числа, а разница огромна, поэтому фиктивная переменная, такая как -1 или даже 999999, здесь не годится.
Один из столбцов содержит либо допустимое десятичное число, например 125.123, текст NA или пустая строка. Я использую Regexp, чтобы позаботиться о текстовых значениях - или, по крайней мере, они отображаются как инициализированное значение, а также пустые строки при тестировании с ненулевым выводом, так что это нормально.
Однако когда я хочу, чтобы вывод был нулевым, я всегда получаю ошибку.
Есть идеи? Я могу найти все виды вещей, показывающих, как преобразовать его в значение по умолчанию, если оно равно нулю, и я могу инициализировать переменную с -100, чтобы добиться этого по умолчанию, но я хочу, чтобы фактический вывод для этого столбца был нулевым, не какая-либо замена.
Я попытался GenOutputBuffer.priceadj_IsNull = true, но это не помогло, и, возможно, здесь была красная сельдь, поскольку ошибка - это значение NULL, а не то, что поле вывода не может содержать значения NULL. Угадай. Я не могу снять значение. Это подчеркивает красный цвет. Я мог бы попытаться проверить, имеет ли оно значение, используя .HasValue, но тогда как мне сказать, если оно не имеет значения, пожалуйста, все равно поставьте нулевое значение в выводе?
Соответствующие разделы кода:
string col2str, col3str;
decimal? col2decN, col3decN;
col2decN = null; //DOES NOT WORK WHEN THIS IS NULL
col3decN = -100; //DOES WORK BUT DO NOT WANT A DUMMY FOR COLUMN 2
. , .
col2str = Regex.Replace(SplitData[2], "[^0-9.]","");
try
{
col2decN = System.Convert.ToDecimal(col2str);
}
catch
{
//NOTHING
}
GenOutputBuffer.AddRow();
GenOutputBuffer.prodid = SplitData[0];
GenOutputBuffer.priceadj = col2decN.Value;