私はジェネリックスに新しく、小さな自己練習用コードを実装する際に問題があります。int型の値を、charなどの同等のジェネリック型のパラメータにキャストするにはどうすればよいですか?
リンクリストを作成しています。私はcharまたはint値を格納する必要があります。私は(86がTで指定された型に値を変換し、範囲[33127)でランダムな値を生成することにより、リンクリストを作成する方法であり、例えばしている場合
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; }
}
:だから私は、一般的な実装を作ることにしましたTがCharの場合、リンクされたリストノードに格納される値は '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)値=(CHAR)r.Next(33、127)。なぜTが型Charの場合、コンパイラは "where T:struct、IConvertible"を指定したとしても "型 'int'を 'T' 'に変換できないと言っていますか? TはどちらかであるのInt32またはchar、それらの両方がIConvertibleを実装する場合
2)は、「暗黙のうちに 『LinkedList.Node<System.IConvertible>
』にタイプ 『LinkedList.Node<T>
』を変換できません」、Node<IConvertible>
にNode<Int32>
またはNode<Char>
をキャストする方法は何ですか?
ありがとうございます!