Sono un neofita dei generici e sto avendo qualche problema nell'implementare un piccolo codice di auto-pratica.Come faccio a trasmettere un valore int a un parametro di tipo generico equivalente come char?
Sto creando un elenco collegato. Voglio che memorizzi i valori char o int. Così ho deciso di fare l'implementazione generica:
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; }
}
Ho un metodo che crea la lista collegata, generando valori casuali nell'intervallo [33.127), convertendo il valore del tipo specificato dal T (per esempio, se 86 è generato e T è Char, quindi il valore da memorizzare nel nodo dell'elenco collegato sarà 'V'; Se T è Int32, il valore sarà semplicemente 86). Sono di fronte a due problemi:
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
}
Questi sono i problemi:
1) Normalmente ciò è possibile: (int) Valore = (char) r.Next (33, 127). Perché se T è di tipo Char, il compilatore dice "Impossibile convertire il tipo 'int' in 'T'", anche se avessi specificato "dove T: struct, IConvertible"?
2) "Impossibile implicitamente tipo convertire 'LinkedList.Node<T>
' a 'LinkedList.Node<System.IConvertible>
'" Se T è uno Int32 o Char e ciascuno di essi implementare IConvertible, qual è il modo per lanciare Node<Int32>
o Node<Char>
-Node<IConvertible>
?
Grazie mille!