Преобразовать десятичные числа? удвоить?
Мне интересно, что было бы лучшим способом (в смысле более безопасного и сжатого) преобразовать из одного типа NULL в другой "совместимый" тип с нулевым значением.
В частности, преобразование из десятичного числа? удвоить? может быть выполнено с помощью:
public double? ConvertToNullableDouble(decimal? source)
{
return source.HasValue ? Convert.ToDouble(source) : (double?) null;
}
Есть ли лучший способ сделать это? Может быть, использование стандартного преобразования?
Ответы
Ответ 1
Построен в бросках для победы! Просто протестировал это в VS2012 и VS2010:
decimal? numberDecimal = new Decimal(5);
decimal? nullDecimal = null;
double? numberDouble = (double?)numberDecimal; // = 5.0
double? nullDouble = (double?)nullDecimal; // = null
Просто использование явного приведения будет отличать значение null до нуля, а внутреннее десятичное значение удваивается. Успех!
Ответ 2
В общем случае, если вы хотите конвертировать из любого типа данных в другой, если они совместимы, используйте это:
Convert.ChangeType(your variable, typeof(datatype you want convert to));
например:
string str= "123";
int value1 = (int)Convert.ChangeType(str, typeof(int));
float? value2 = (float?)Convert.ChangeType(str, typeof(float));
...................................
Немного дальше, если вы хотите, чтобы это стало более безопасным, вы можете добавить к нему попытку:
string str= "123";
try
{
int value1 = (int)Convert.ChangeType(str, typeof(int));
int? value2 = (int?)Convert.ChangeType(str, typeof(int));
float value3 = (float)Convert.ChangeType(str, typeof(float));
float? value4 = (float?)Convert.ChangeType(str, typeof(float));
}
catch(Exception ex)
{
// do nothing, or assign a default value
}
это проверено в VS 2010