我是新來的泛型,我在實現一個小的自我實踐代碼時遇到了一些麻煩。如何將int值轉換爲與char等效的泛型類型參數?
我在創建一個鏈表。我希望它存儲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; }
}
我已創建通過在範圍[33127)產生隨機值,該值轉換爲被T指定的類型的鏈接列表的方法(例如,如果86是生成並且T是Char,那麼要存儲在鏈表節點中的值將是'V';如果T是Int32,則值將簡單地爲86)。我現在面臨兩個問題:
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'」?
2)「無法隱式轉換類型‘LinkedList.Node<T>
’到‘LinkedList.Node<System.IConvertible>
’」如果T爲的Int32或字符二者均實現IConvertible,什麼是投Node<Int32>
或Node<Char>
到Node<IConvertible>
的方式嗎?
非常感謝!