Problem mit einem Dictionary

16/04/2010 - 20:43 von Carsten Posingies | Report spam
Hallo NG,

das Problem, das ich hier habe, ist vielleicht ein bisschen exotisch,
aber Ihr habt bestimmt Ideen, die mich weiterbringen.

Also:

class Foo<TKey, TElement>
{
Dictionary<TKey, TElement> theDictionary;

TElement GetElement(TKey key)
{
return theElements[key];
}

// Darum geht's:
TElement GetElement(int index)
{
// ????
}
}

Das Problem tritt genau dann auf, wenn

var theFoo = new Foo<int, dynamic>();

denn jetzt könnte ich ja

theFoo.Add(0, "bar");

sagen, aber auch

theFoo.Add(10000, "barn");

und dann

theFoo.Add(1, "stuff");

Danach wàre das Dictionary als Array

0 -> bar
1 -> barn
2 -> stuff

Was aber ist nun theFoo[1]?

Greift GetElement(TKey), ist GetElement[1] == "stuff".
Greift GetElement(int), ist GetElement[1] == "barn".

Wie würdet Ihr das auflösen?

Thx as always,

Carsten
 

Lesen sie die antworten

#1 Nicolas Pavlidis
16/04/2010 - 21:26 | Warnen spam
On 16.04.2010 20:43, Carsten Posingies wrote:
Hallo NG,

das Problem, das ich hier habe, ist vielleicht ein bisschen exotisch,
aber Ihr habt bestimmt Ideen, die mich weiterbringen.

Also:

class Foo<TKey, TElement>
{
Dictionary<TKey, TElement> theDictionary;

TElement GetElement(TKey key)
{
return theElements[key];
}

// Darum geht's:
TElement GetElement(int index)
{
// ????
}
}





[...]

Greift GetElement(TKey), ist GetElement[1] == "stuff".
Greift GetElement(int), ist GetElement[1] == "barn".

Wie würdet Ihr das auflösen?



Was sagt der Compiler :-) ?
Habs grad ausprobiert um meinen Verdacht zu bestàtgen:
Er ruft die index - Version in dem Fall auf. Was wohl damit zu erklàren
ist, dass der Compiler den besten Match sucht für einen Overload, und
das ist in dem Fall die int - Version weil sie genau passt, da die
zweite mögliche Definition für GetElement für den Compiler dennoch den
formalen Parametertyp TKey hat.

Die Intellisense im VS sortiert die generische Version übrigens auch
gleich aus.

Ähnliche fragen