Преобразовать десятичные числа? удвоить?

Мне интересно, что было бы лучшим способом (в смысле более безопасного и сжатого) преобразовать из одного типа 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