[Mono-list] Crazy generic dictionary?

"Andrés G. Aragoneses [ knocte ] "Andrés G. Aragoneses [ knocte ]
Sun Sep 30 14:51:55 EDT 2007


Robert Jordan escribió:
> Andrés G. Aragoneses [ knocte ] wrote:
>> Robert Jordan escribió:
>>> Andrés G. Aragoneses [ knocte ] wrote:
>>>> Today I've come out with this wish:
>>>>
>>>> Dictionary<typeof(T), List<T>> InternalCollection;
>>>>
>>>>
>>>> Of course, the compiler tells me an error, but I would want to know if I 
>>>> can make this kind of collection with C# generics, in order to obtain 
>>>> syntatic sugar and type safety, I mean:
>>>>
>>>> //compilation should succeed only if oMyObj is TypeX:T
>>>> InternalCollection.Add(typeof(TypeX), oMyObj);
>>>>
>>>> Any thoughts?
>>> class FooDictionary<T> : Dictionary<System.Type, T>
>>> {
>>> 	public void Add (T t)
>>> 	{
>>> 		this [typeof(T)] = t;
>>> 	}
>>> }
>>>
>> But that would only allow adding one object:
> 
> 
> Well, then use that slightly modified Add method:
> 
>   	public void Add (T t)
>   	{
> 		if (t == null)
> 			throw new ArgumentNullException ("t");
> 		this [t.GetType ()] = t;
>   	}
> 

Ok! But if I modify it to use lists, I get a compiler error:

class FooDictionary<T> : Dictionary<Type, List<T>>
{
     public void Add (List<T> t)
     {
         if (t == null)
         {
             throw new ArgumentNullException("t");
         }
         if (t.Count > 0)
         {
             this[t[0].GetType()] = t;
         }
     }
}

...

FooDictionary<mytype> foo = new FooDictionary<mytype>();
foo.Add(new List<subtypeA>());

Error	11	Argument '1': cannot convert from 
'System.Collections.Generic.List<subtypeA>' to 
'System.Collections.Generic.List<mytype>'

However, it should allow it because subtypeA inherits from mytype, 
right? I think I've reached a limitation of .NET generics, which I think 
I read about here[1] :(

Thanks,

	Andrés	[ knocte ]

-- 
[1] http://www.jprl.com/Blog/archive/development/2007/Aug-31.html



More information about the Mono-list mailing list