問題
using System.Collections.Generic;
using System.Linq;
基本クラスと2つの派生クラスがある場合:
class Base{}
class Derived0 : Base{}
class Derived1 : Base{}
私は2つのタイプの辞書を持っています:
IDictionary<String, Derived0> d0 = ...;
IDictionary<String, Derived1> d1 = ...;
タイプが必要な2つの辞書の和集合を見つけたいと思いますIDictionary<String, Base>
。(キーは両方の辞書で一意であることをすでに知っているので、重複がある場合の動作は気にしません。)
試み
それらが同じタイプであれば、私は使用できます
var union = d0.Concat(d1);
しかし、これによりエラーが発生します(を使用してコンパイルdmcs
):
Test.cs(15,20): error CS0411: The type arguments for method `System.Linq.Queryable.Concat<TSource>(this System.Linq.IQueryable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' cannot be inferred from the usage. Try specifying the type arguments explicitly
Base
型引数として明示的に指定した場合:
IDictionary<string, Base> union = d0.Concat<Base>(d1);
それでも機能しません:
Test.cs(15,42): error CS1928: Type `System.Collections.Generic.IDictionary<string,Derived0>' does not contain a member `Concat' and the best extension method overload `System.Linq.Enumerable.Concat<Base>(this System.Collections.Generic.IEnumerable<Base>, System.Collections.Generic.IEnumerable<Base>)' has some invalid arguments
/usr/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll (Location of the symbol related to previous error)
Test.cs(15,42): error CS1929: Extension method instance type `System.Collections.Generic.IDictionary<string,Derived0>' cannot be converted to `System.Collections.Generic.IEnumerable<Base>'
原則として、新しい辞書オブジェクトを作成しているので、ここでは分散は重要ではありませんが、型システムでそれを表現する方法を理解することはできません。