पर एक प्रकार पैरामीटर के रूप में "गतिशील" कीवर्ड का उपयोग करने का पता लगाना मुझे संदेह है कि इस प्रश्न का संक्षिप्त उत्तर "नहीं" है, लेकिन मुझे सी # 4.0 में रनटाइम पर गतिशील कीवर्ड के उपयोग का पता लगाने की क्षमता में रूचि है, विशेष रूप से एक विधि के लिए एक सामान्य प्रकार पैरामीटर के रूप में।रनटाइम
public IRestResponse<TResource> Get<TResource>(Uri uri, IDictionary<string, string> headers)
where TResource : new()
{
var request = this.GetRequest(uri, headers);
return request.GetResponse<TResource>();
}
:
कुछ पृष्ठभूमि देने के लिए, हम एक पुस्तकालय जो एक प्रकार है कि जब डी-serializing प्रतिक्रिया इस्तेमाल किया जाना चाहिए, जैसे निर्दिष्ट करने के लिए एक प्रकार पैरामीटर लेता है हमारी परियोजनाओं के एक नंबर के बीच साझा में एक RestClient वर्ग है
दुर्भाग्य से (कारणों से मैं ब्रेवटी के लिए यहां नहीं पहुंचूंगा) गतिशील प्रकार को वापस करने के लिए गति पैरामीटर के रूप में गतिशील का उपयोग करके ठीक से काम नहीं करता है - हमें एक दूसरा हस्ताक्षर जोड़ना पड़ा है एक गतिशील प्रतिक्रिया प्रकार वापस करने के लिए कक्षा:
public IRestResponse<dynamic> Get(Uri uri, IDictionary<string, string> headers)
{
var request = this.GetRequest(uri, headers);
return request.GetResponse();
}
हालांकि, पहले विधि में प्रकार पैरामीटर के रूप में गतिशील का उपयोग करना एक बहुत ही अजीब त्रुटि का कारण बनता है जो वास्तविक समस्या को मुखौटा करता है और पूरी चीज को सिरदर्द को डिबग कर देता है। एपीआई का उपयोग कर अन्य प्रोग्रामर की मदद करने के लिए, मैं पहली विधि में गतिशीलता के उपयोग को आजमाने और पहचानना चाहता हूं ताकि या तो यह बिल्कुल संकलित नहीं होगा या जब अपवाद का उपयोग किया जाता है तो लाइनों के साथ कुछ कहता है यदि आप गतिशील प्रतिक्रिया प्रकार चाहते हैं तो "इस अन्य विधि का उपयोग करें"।
मूल रूप से या तो:
public IRestResponse<TResource> Get<TResource>(Uri uri, IDictionary<string, string> headers)
where TResource is not dynamic
या
public IRestResponse<TResource> Get<TResource>(Uri uri, IDictionary<string, string> headers)
where TResource : new()
{
if (typeof(TResource).isDynamic())
{
throw new Exception();
}
var request = this.GetRequest(uri, headers);
return request.GetResponse<TResource>();
}
इन बातों में से किसी के लिए संभव है? हम वीएस -2010 और नेट 4.0 का उपयोग कर रहे हैं, लेकिन भविष्य में संदर्भ के लिए मुझे .NET 4.5 समाधान में रुचि होगी यदि नई भाषा सुविधाओं का उपयोग करना संभव है।
रनटाइम पर 'ट्रेशोर्स' केवल 'ऑब्जेक्ट' है जब उपयोगकर्ता 'गतिशील' निर्दिष्ट करता है। क्या उपयोगकर्ता कभी भी
मैंने आपका शीर्षक संपादित किया है। कृपया देखें, "[प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?] (Http://meta.stackexchange.com/questions/19190/)", जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"। –
@TimS। हाँ