Вы не можете выполнить это преобразование через прямое приведение - это не будет безопасно.Вместо этого вы должны использовать:
IList<IList<object>> ret = new List<IList<object>>();
Тогда для каждого «подсписка» вы можете использовать:
// Or whatever
ret.Add(new List<object>());
Наконец, просто верните ret
.
You может использовать LINQ для выполнения преобразования вашего существующего List<List<object>>
при его возврате, но было бы лучше просто создать более подходящий тип для начала, как показано выше.
Чтобы понять, почему некоторые из существующих ответов являются неправильными, предположим, что вы могли бы сделать это:
IList<IList<object>> p = new List<List<object>>();
Тогда это будет действительно:
List<List<object>> listOfLists = new List<List<object>>();
IList<IList<object>> p = listOfLists;
p.Add(new object[]);
List<object> list = p[0];
Ноp[0]
- это ссылка на object[]
, а не List<object>
... наш, предположительно, типобезопасный код больше не выглядит безопасным ...
К счастью, IList<T>
является инвариантомчтобы предотвратить именно эту проблему.