2013-07-13 6 views
2

Я пытаюсь сохранить набор списков в списке, но потому что заставляет программиста в <> какой тип данных будет удерживаться в списке, а также список, который содержит список I похоже, не могут добавить мои списки в мой главный список, содержащий список, не получив ошибку, сообщая мне, что я не добавляю правильный тип списка.Как я могу составить список списков

public List<MyObject1> List1{ get; set; } 
public List<MyObject2> List2{ get; set; } 
List<List<object>> myMasterList; //nested type definitions here 

public SetUpLists() 
{ 
    List1= new List<MyObject1>(); 
    List2= new List<MyObject2>(); 
    myMasterList= new List<List<object>>(); //nested type definitions here 

    //ERROR ON NEXT 2 LINES 
    'System.Collections.Generic.List<System.Collections.Generic.List<object>>.Add(System.Collections.Generic.List<object>)' has some invalid arguments. 

    myMasterList.Add(List1); 
    upgradeList.Add(List2); 
} 

Так что, глядя на отчет об ошибке, похоже, что он должен работать. Я даже попытался сделать это так, чтобы его не List<List<object>>, а родительский класс на классах MyObject1 и MyObject2: List<List<MyObjectMaster>> - безрезультатно. Я получаю ту же ошибку.

Любая помощь очень ценится.

+1

как о словаре >? – cookieMonster

+0

@cookieMonster: Проблема в том, что нет единого типа, который можно использовать для 'whatever'. 'Список ' инвариантен. –

ответ

3

myMasterList напечатан как List<List<object>>, который принимает только элементы типа List<object>. Хотя MyObject1 получен из объекта, List<MyObject1> не эквивалентен List<object>.

Чтобы обойти эту проблему, вы можете использовать либо myMasterList как List<object> и отливать объекты List<object> каждый раз при обращении к ним, или использовать запрос Linq, как это, чтобы бросить свои индивидуальные списки List<object>, прежде чем вставлять их.

myMasterList.Add(List1.Select(item => item as Object).ToList()); 
1

List1 имеет тип List<MyObject1>, но вы используете его как бы List<object>. Они могут выглядеть одинаково, но не совпадать и не конвертируемы.

Ваше решение здесь состоит в том, чтобы составлять списки общего базового типа или интерфейса от MyObject1 и MyObject2. Если ничего другого, вы можете использовать List<object> всюду.

Вы говорите, что вы пытались с MyObjectMaster, но не показать код ... проблема, вероятно, что List<MyObjectMaster> и List<MyObject1> не являются конвертируемыми либо ... То есть, вы должны использовать точно такой же тип списка везде.

Смежные вопросы