Основная проблема со структурой данных заключается в том, что у вас есть не только string
и double
, но int
:
var SampleValues = new Dictionary<string, object> {
{ "t1", 45.08 }, // boxed double value
{ "t2", "A String Value" }, // string value
{ "t3", 83 }, // <- N.B. this is boxed int (83), not double (83.0) value
};
Casting в штучной упаковке int
в double
выдает исключение :
object o = 83; // int value (83) which is boxed into object
double d = (double) o; // <- Exception will be thrown here (invalid cast)
Обратите внимание, что преобразование в порядке:
object o = 83;
double d = Convert.ToDouble(o); // d == 83.0
Таким образом, вы можете попробовать отфильтровать String
элементов, а затем Convert
все остальные (значения double
и int
) в double
; в вашем случае:
var doubles = samples
.SampleValues
.Where(pair => (pair.Value != null) && !(pair.Value is string)) // not string value
.Select(pair => new {
Name = samples.Name,
Value = Convert.ToDouble(pair.Value), // which we convert to double
});
var strings = samples
.SampleValues
.Where(pair => pair.Value is string)
.Select(pair => new {
Name = samples.Name,
Value = Convert.ToString(pair.Value),
});