こういうことがしたいのですが、エラーが出てしまいます。
C#
1interface IHoge {} 2 3class Hoge : IHoge {} 4 5class HogeHolder 6{ 7 public HogeHolder(List<IHoge> hogeList) 8 { 9 //... 10 } 11} 12 13class Program 14{ 15 static void Main(string[] args) 16 { 17 var list = new List<Hoge>(); 18 list.Add(new Hoge()); 19 var holder = new HogeHolder(list); 20 } 21}
以下のようなエラーが出ます。
The best overloaded method match for `HogeHolder.HogeHolder(System.Collections.Generic.List<IHoge>)' has some invalid arguments
Listを通さない場合はエラーなく通ります。
C#
1class HogeHolder 2{ 3 public HogeHolder(<IHoge> hoge) 4 { 5 //... 6 } 7} 8 9class Program 10{ 11 static void Main(string[] args) 12 { 13 var hoge = new Hoge(); 14 var holder = new HogeHolder(hoge); 15 } 16}
HogeHolderを、IHogeを下限とするジェネリクスのクラスにすれば、多分コンパイルは通るのかと思いますが、特にジェネリクスである必要のないクラスなので、それはしたくありません。
メソッドのように、引数から型パラメータを推測できれば、不必要な型パラメータ指定する必要がないので構わないのですが、コンストラクタの場合はできないようですね。。。
どうしたらいいのでしょうか?
--追記--
環境はMonoであり、純粋な.NETではありません。.NET環境では、HogeHolderの引数をIEnumerableにすることで、エラーなくコンパイルできました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。