[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