У меня есть эта функция, которая проверяла текущее значение. Когда текущее значение (1-й параметр) равно нулю или пусто, оно использует значение по умолчанию, которое вы передаете (2-й параметр).
public static T ZeroNull<T>(object currentValue, T defaultValue)
{
if (currentValue.Equals(DBNull.Value))
return (T)defaultValue;
else if (currentValue.Equals(string.Empty))
return (T)defaultValue;
else
return (T)currentValue;
}
Приведенный выше код работает правильно, частично... Но когда я использую такой код, он выдает "Указанное приведение недействительно..."
float currValue = 20.1f;
int i = ZeroNull<int>(currValue, 0); // Specified cast is not valid
int i = ZeroNull<int>("10", 0); // Specified cast is not valid
Кто-нибудь может улучшить приведенный выше фрагмент кода? И почему компилятор выдает эту ошибку?
С уважением, Джесси
currValue
представляет собой упакованное число с плавающей запятой (20.1f), и вы пытаетесь распаковать его в int, который недействителен. То же самое для 10 - person chomba   schedule 22.05.2015code
float currValue = 10.2f;code
int newCurrValue = (int)currValue; Я просто предполагаю, что у них одинаковая логика? - person klaydze   schedule 22.05.2015(T)currentValue
- person Yuval Itzchakov   schedule 22.05.2015??
? У вас есть DataTable, в котором вместо числовых типов используются строки? - person Panagiotis Kanavos   schedule 22.05.2015_defaultMinValue = PFDMSDataCollection.ZeroNull<double>(datarow["dblDefaultMinValue"], 0.0);
_defaultMaxValue = PFDMSDataCollection.ZeroNull<double>(datarow["dblDefaultMaxValue"], 0.0);
- person klaydze   schedule 22.05.2015