मैं जेनेरिक के लिए नया हूं और मुझे एक छोटे से आत्म अभ्यास कोड को लागू करने में कुछ परेशानी हो रही है।मैं एक सामान्य प्रकार पैरामीटर के लिए एक int मान कैसे लगा सकता हूं जो 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) में यादृच्छिक मान पैदा करने, प्रकार टी द्वारा निर्दिष्ट करने के लिए मूल्य में कनवर्ट करके लिंक्ड सूची बनाता है (उदाहरण के लिए यदि 86 है: तो मैं कार्यान्वयन सामान्य बनाने का फैसला किया उत्पन्न और टी चार है, तो लिंक किए गए सूची नोड में संग्रहीत करने वाला मान 'वी' होगा; यदि टी 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) आम तौर पर यह संभव है: (पूर्णांक) मूल्य = (चार) r.Next (33, 127) मैं दो समस्याओं का सामना कर रहा हूँ। क्यों टी टी प्रकार का है, तो कंपाइलर कहता है, "टाइप 'int' to 't' को परिवर्तित नहीं किया जा सकता है, भले ही मैंने" जहां टी: स्ट्रक्चर, आईकोनवर्टिबल "निर्दिष्ट किया हो?
2) "परोक्ष प्रकार 'LinkedList.Node<System.IConvertible>
' के लिए कनवर्ट नहीं कर सकता 'LinkedList.Node<T>
'" टी या तो Int32 या चार और उन दोनों को IConvertible को लागू किया जाता है, जिस तरह से Node<Int32>
या Node<Char>
Node<IConvertible>
को कास्ट करने के लिए क्या है?
बहुत बहुत धन्यवाद!