Ich bin neu bei Generika und habe Probleme, einen kleinen Self-Practice-Code zu implementieren.Wie kann ich einen int-Wert in einen generischen Typparameter umwandeln, der äquivalent ist wie char?
Ich erstelle eine verknüpfte Liste. Ich möchte, dass es char oder int-Werte speichert. Also habe ich beschlossen, die Umsetzung zu machen generic:
public class Node<T> where T : struct, IConvertible
{
public Node<T> next = null;
public T data = default(T);
public Node(T value) { this.data = value; }
}
Ich habe eine Methode, die die verknüpfte Liste erstellt durch zufällige Werte im Bereich Erzeugung [33.127), den Wert in den Typ Umwandlung von T angegeben (zB wenn 86 erzeugt und T ist Char, dann ist der Wert, der in dem Knoten der verknüpften Liste gespeichert werden soll, "V"; Wenn T Int32 ist, dann wird der Wert einfach 86). Ich bin vor zwei Probleme:
static Node<IConvertible> CreateList<T>(int len) where T : struct, IConvertible
{
Random r = new Random((int)DateTime.Now.Ticks);
T value = (T)r.Next(33, 127); // Problem #1
Node<T> head = new Node<T>(value);
Node<T> n = head;
for (int i = 1; i < len; i++)
{
n.next = new Node<T>(value);
n = n.next;
}
return head; // Problem #2
}
Dies sind die Probleme:
1) Normalerweise ist dies möglich: (int) value = (char) r.Next (33, 127). Warum, wenn T vom Typ Char ist, sagt der Compiler "Kann den Typ 'int' nicht in 'T' konvertieren, selbst wenn ich" where T: struct, IConvertible "angegeben hätte?
2) „kann nicht implizit Typ konvertieren‚LinkedList.Node<T>
‘auf‚LinkedList.Node<System.IConvertible>
‘“ Wenn T entweder Int32 oder Char und beide IConvertible implementieren, was die Art und Weise Node<Int32>
oder Node<Char>
-Node<IConvertible>
zu werfen?
Vielen Dank!