Tôi mới sử dụng Generics và gặp rắc rối khi triển khai một mã thực hành nhỏ.Làm cách nào để truyền giá trị int cho thông số loại chung chung tương đương như char?
Tôi đang tạo danh sách được liên kết. Tôi muốn nó lưu trữ giá trị char hoặc int. Vì vậy, tôi quyết định làm cho việc thực hiện chung:
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ôi có một phương pháp mà tạo ra các danh sách liên kết bằng cách tạo ra các giá trị ngẫu nhiên trong khoảng [33.127), chuyển đổi các giá trị cho các loại theo quy định của T (ví dụ nếu 86 là tạo ra và T là Char, sau đó giá trị được lưu trữ trong nút danh sách liên kết sẽ là 'V'; Nếu T là Int32, thì giá trị sẽ đơn giản là 86). Tôi đang phải đối mặt với hai vấn đề:
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
}
Đây là những vấn đề:
1) Thông thường điều này có thể: (int) value = (char) r.Next (33, 127). Tại sao nếu T là kiểu Char, trình biên dịch nói "Không thể chuyển đổi kiểu 'int' thành 'T'", ngay cả khi tôi đã chỉ định "ở đâu T: struct, IConvertible"?
2) "Không thể chuyển đổi ngầm gõ 'LinkedList.Node<T>
' thành 'LinkedList.Node<System.IConvertible>
" Nếu T là một trong hai Int32 hoặc Char và cả trong số họ thực hiện IConvertible, cách để cast Node<Int32>
hoặc Node<Char>
-Node<IConvertible>
là gì?
Cảm ơn rất nhiều!