私はジェネリックが初めてで、小さな自己実践コードの実装に問題があります。
リンクリストを作成しています。char または int 値を格納したい。そこで、実装を汎用にすることにしました。
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; }
}
[33,127) の範囲でランダムな値を生成し、その値を T で指定された型に変換してリンク リストを作成するメソッドがあります (たとえば、86 が生成され、T が Char の場合、値はリンク リストに格納されます)。 node は 'V' になります。T が Int32 の場合、値は単純に 86 になります)。私は2つの問題に直面しています:
    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
    }
これらは問題です:
1) 通常、これは可能です: (int) value = (char) r.Next(33, 127). T が Char 型の場合、「where T : struct, IConvertible」を指定したにもかかわらず、コンパイラは「型 'int' を 'T' に変換できません」と言うのはなぜですか?
LinkedList.Node<T>2) 「型 ' ' を ' ' に暗黙的に変換できませんLinkedList.Node<System.IConvertible>」 T が Int32 または Char のいずれかであり、それらの両方が IConvertible を実装している場合、キャストNode<Int32>またはNode<Char>への方法は何Node<IConvertible>ですか?
どうもありがとう!