1

これは正しいようです:

IList<IList<string>> MyList = new List<IList<string>>();
IList<string> List_Temp = new List<string>();
MyList .Add(List_Temp );

これは正しくないようです:

IList<List<string>> MyList = new List<List<string>>();
IList<string> List_Temp = new List<string>();
MyList .Add(List_Temp );

なぜ2番目が間違っているのですか?

4

4 に答える 4

12

IListクラスの代わりにいくつかの実装を追加しようとしているためList、これは定義上要件です-IList< List >。これを見てください:

IList<List<string>> MyList = new List<List<string>>();
IList<string> List_Temp = new Collection<string>(); // ooops!
MyList .Add(List_Temp );

サンプルの2行目は、をCollection<T>実装IList<T>しているため正しいですが、3行目は、Collection<T>を継承していないため正しくありませんList<T>

于 2012-09-05T07:48:20.563 に答える
3

MyListタイプの要素が含まれてList<string>いますが、タイプの要素を追加しようとしていますIList<string>

于 2012-09-05T07:48:48.690 に答える
1

"System.Collections.Generic.IList<string>"コンパイラは、"System.Collections.Generic.List<string>";にキャストできないと言っています。

List<T>次のように定義されます。

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

IList<T>ですが

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

したがって、List<T>にキャストできますIList<T>。逆ではありません。

于 2012-09-05T07:51:02.103 に答える
0

リストに追加するときは常にオブジェクトタイプが同じである必要があります。mylistリストオブジェクトタイプはlistであり、これにiListを追加するために使用しました。

于 2012-09-05T07:53:03.337 に答える