Вы не можете разыграть obj
до Dictionary<object, object>
, потому что это не Dictionary<object, object>
. Да, его ключи и значения берутся из object
и могут быть преобразованы в object
. Но вы не можете приводить универсальные типы в C #, потому что они не являются ковариантными. Даже если T
происходит от object
, List<T>
не происходит от List<object>
.
Рассмотрим этот метод:
void ModifyList<List<object> list)
{
for (int i=0; i<list.Count; i++)
{
list[i] = list[i].ToString();
}
}
Если бы вы могли привести List<int>
к List<object>
, вы могли бы передать List<int>
этому методу, и он превратился бы во что-то еще.
Это изменится, когда в C # 4.0 будут введены ковариантные обобщения. Эта статья является довольно хорошим объяснением связанных с этим проблем.
Но чтобы решить вашу реальную проблему, это поможет:
List<KeyValuePair<object, object>> list = d.AsEnumerable()
.Select(x => new KeyValuePair<object, object>(x.Key, x.Value))
.ToList();