है, मुझे एक सामान्य विधि मिली है जो एक आईडी को स्ट्रिंग से बदलती है (उदाहरण के लिए, एक एएसपी.नेट फॉर्म पर एक छिपी हुई फ़ील्ड के मान से पुनर्प्राप्त) टाइप करें और इसके साथ कुछ करता है।स्ट्रिंग से जेनेरिक प्रकार में मूल्य को कनवर्ट करें जो या तो GUID या int
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Convert.ChangeType(rawId, typeof(T));
doSomethingWithId(id);
}
टी या तो Guid या Int32 और इसके बाद के संस्करण कोड (रनटाइम पर) से अधिक हो जाता है, जब यह Guid है, कह रही है कि Guid के लिए स्ट्रिंग से डाली अमान्य है किया जाएगा।
तो मैंने सोचा कि मैं प्रकार की जांच करने के लिए प्रयास कर सकते हैं और अगर Guid, एक नया GUID का दृष्टांत:
var id = default(T);
if (id is Guid)
id = new Guid(rawId);
else
id = (T)Convert.ChangeType(rawId, typeof(T));
अब यह एक त्रुटि देता है (संकलन समय पर) है कि Guid टाइप करने के लिए टी
नहीं बदला जा सकतायह भी सुनिश्चित नहीं है कि इस के आसपास कैसे काम करें। कोई सुझाव?
आप सही हैं, लेकिन यह एक काल्पनिक उदाहरण का एक सा है, वहाँ है कि विधि की सभी खूबियों का है और यह के व्यापक संदर्भ में बातें आसान बनाने पड़ता कि मैं 'मी कर रही है। –
@ वेली: यही कारण है कि जब आप कोई प्रश्न लिखते हैं और प्रतिनिधि चित्र देते हैं तो सावधान रहना उचित होता है। मैं अब भी इसे दो सार्वजनिक गैर-जेनेरिक तरीकों में विभाजित करने पर विचार करता हूं जो कार्यान्वयन के * भाग * के रूप में एक सामान्य जेनेरिक निजी विधि का उपयोग कर सकते हैं। –