Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
Поскольку это структура, а не класс: http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx
A KeyValuePair
является структурой и не наследуется от объекта класса.
Это потому, что KeyValuePair<K,V>
не является классом, является структурой. Преобразование списка в IEnumerable<object>
означало бы, что вам нужно взять каждую пару ключа и поставить его:
IEnumerable<object> test = new List<KeyValuePair<string, int>>().Select(k => (object)k).ToList();
Поскольку вам нужно преобразовать каждый элемент в список, вы не можете сделать это просто листинг самого списка.
Прежде всего, словарь уже является сборником KeyValuePairs, поэтому второй пример отличает весь Словарь к объекту, а не к KeyValuePairs.
В любом случае, если вы хотите использовать Список, вам нужно использовать метод Cast для преобразования структуры KeyValuePair в объект:
IEnumerable<object> test = (IEnumerable<object>)new List<KeyValuePair<string, int>>().Cast<object>();