Quantcast
Channel: Find the union of two dictionaries, with different types of values - Stack Overflow
Viewing all articles
Browse latest Browse all 3

Find the union of two dictionaries, with different types of values

$
0
0

Problem

using System.Collections.Generic;using System.Linq;

Given a base class and 2 derived classes:

class Base{}class Derived0 : Base{}class Derived1 : Base{}

I have two dictionaries, of types:

IDictionary<String, Derived0> d0 = ...;IDictionary<String, Derived1> d1 = ...;

I want to find the union of the two dictionaries, which should have type IDictionary<String, Base>. (I already know that the keys are unique across both dictionaries, so I don't care about behavior when there are duplicates.)


Attempts

If they were of the same type I could use

var union = d0.Concat(d1);

But this gives the error (compiling using 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

If I explicitly give Base as a type argument:

IDictionary<string, Base> union = d0.Concat<Base>(d1);

it still doesn't work:

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>'

In principle, variance shouldn't matter here since I'm creating a new dictionary object, but I can't figure out how to represent it in the type system.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images