Hallo Leute,
ich versuche HashTable nachzuprogrammieren. Nur beim instanziieren von einer benötigten ArrayList spuckt mir Visual Studio die Fehlermeldung aus, dass der Typ Pair nicht generisch verwendet werden kann und nicht vergleichbar wäre. Folglich ein Codesnippet:
[highlight=csharp]using System;
using System.Collections;
namespace Datenstrukturen
{
public class HashTable<TKey, TValue>
{
internal class Pair<TPairKey, TPairValue>
{
public TPairKey Key { get; private set; }
public TPairValue Value { get; set; }
public Pair(TPairKey key, TPairValue value)
{
Key = key;
Value = value;
}
}
private ArrayList<Pair<TKey, TValue>>[] items;
public int Count { get; private set; }
public HashTable(int length = 0)
{
length = length == 0 ? 500 : length;
length = getNextPrime(length);
items = new ArrayList<Pair<TKey, TValue>>[length]; //Nicht möglich
}
}[/highlight]
Der Fehler taucht in der letzten Zeile auf:
Der Typ "Datenstrukturen.HashTable<TKey,TValue>.Pair<TKey, TValue>" kann nicht als Typparameter "T" im generischen Typ oder in der generischen Methode "Datenstrukturen.ArrayList<T>" verwendet werden. Es ist keine implizite Verweiskonvertierung von "Datenstrukturen.HashTable<TKey,TValue>.Pair<TKey, TValue>" in "System.IComparable" vorhanden.
Ich kann natürlich auf meine eigene ArrayList zugreifen und aus der die Schnittstelle IComparable aus dem Datentyp T entfernen, nur denn müsste ich dort auch auf einige Properties verzichten. Ich glaube nicht, dass das der Sinn der Sache ist.
Hat jemand vielleicht einen Rat, wie ich das Problem in der HashTable ansonsten leicht beheben könnte?
Lieben Gruß
ich versuche HashTable nachzuprogrammieren. Nur beim instanziieren von einer benötigten ArrayList spuckt mir Visual Studio die Fehlermeldung aus, dass der Typ Pair nicht generisch verwendet werden kann und nicht vergleichbar wäre. Folglich ein Codesnippet:
[highlight=csharp]using System;
using System.Collections;
namespace Datenstrukturen
{
public class HashTable<TKey, TValue>
{
internal class Pair<TPairKey, TPairValue>
{
public TPairKey Key { get; private set; }
public TPairValue Value { get; set; }
public Pair(TPairKey key, TPairValue value)
{
Key = key;
Value = value;
}
}
private ArrayList<Pair<TKey, TValue>>[] items;
public int Count { get; private set; }
public HashTable(int length = 0)
{
length = length == 0 ? 500 : length;
length = getNextPrime(length);
items = new ArrayList<Pair<TKey, TValue>>[length]; //Nicht möglich
}
}[/highlight]
Der Fehler taucht in der letzten Zeile auf:
Der Typ "Datenstrukturen.HashTable<TKey,TValue>.Pair<TKey, TValue>" kann nicht als Typparameter "T" im generischen Typ oder in der generischen Methode "Datenstrukturen.ArrayList<T>" verwendet werden. Es ist keine implizite Verweiskonvertierung von "Datenstrukturen.HashTable<TKey,TValue>.Pair<TKey, TValue>" in "System.IComparable" vorhanden.
Ich kann natürlich auf meine eigene ArrayList zugreifen und aus der die Schnittstelle IComparable aus dem Datentyp T entfernen, nur denn müsste ich dort auch auf einige Properties verzichten. Ich glaube nicht, dass das der Sinn der Sache ist.
Hat jemand vielleicht einen Rat, wie ich das Problem in der HashTable ansonsten leicht beheben könnte?
Lieben Gruß
Comment