у меня есть:IDictionary, словарь
IDictionary<string, IDictionary<string, IList<long>>> OldDic1;
(только для целей иллюстрации, она конкретизируется и имеет значения - где-то еще)
Почему я могу это сделать?
Dictionary<string, IDictionary<string, IList<long>>> dic1 =
OldDic1 as Dictionary<string, IDictionary<string, IList<long>>>;
В основном dic1 после выполнения этой строки имеет все значения от OldDic1; работает.
Однако, когда я делаю это:
Dictionary<string, Dictionary<string, List<long>>> dic1 =
OldDic1 as Dictionary<string, Dictionary<string, List<long>>>;
Я получаю нулевой, это то же самое, как отливка, кроме него не врезаться, а вместо этого он возвращает нуль. Итак, вопрос в том, почему я не могу отнести его от интерфейсов к типам? есть ли решение, другое, а затем изменение того, как оно хранится в первую очередь?
Кастинг немного запутанный. При выполнении такого рода приведения (или использования «как») в основном все, что вы делаете, это проверка того, действительно ли объект является указанным типом в хранилище. Вы не создаете новый объект с таким типом, вы просто проверяете. Если это неясно, попробуйте прочитать эту статью: http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –
Спасибо, отличная статья. – ra170