मेरे पास कक्षा Thing
है जो string
से पूरी तरह से जाली योग्य है। जब मैं Thing
पैरामीटर के साथ विधि को कॉल करता हूं तो सीधे string
से Thing
पर कास्ट सही ढंग से किया जाता है।एक परावर्तित विधि कॉल पर अंतर्निहित रूप से कैसे डाला जाए
लेकिन अगर मैं प्रतिबिंब का उपयोग एक ही विधि का यह अपवाद
System.ArgumentException : Object of type 'System.String' cannot be
converted to type 'Things.Program+Thing'.
हो सकता है कि वहाँ इस के लिए एक अच्छा कारण है फेंकता कॉल करने के लिए, लेकिन मैं इसे समझ नहीं कर सकते हैं। क्या किसी को यह पता है कि प्रतिबिंब का उपयोग करके यह कैसे काम करना है?
namespace Things
{
class Program
{
public class Thing
{
public string Some;
public static implicit operator Thing(string s)
{
return new Thing {Some = s};
}
}
public void showThing(Thing t)
{
Console.WriteLine("Some = " + t.Some);
}
public void Main()
{
showThing("foo");
MethodInfo showThingReflected = GetType().GetMethod("showThing");
showThingReflected.Invoke(this, new dynamic[] {"foo"});
}
}
}
मेटा: कृपया, कोई चर्चा क्यों अंतर्निहित कास्टिंग या प्रतिबिंब बुरा है।
मेरे सिर के ऊपर बंद, मैं यह है, क्योंकि दांव लगाना होगा (मुझे लगता है, और मुझे ठीक कर लें मैं गलत हूँ) है कि निहित कास्टिंग संकलक के लिए वाक्यविन्यास चीनी है। कि कास्टिंग विधि के लिए वास्तविक कॉल संकलन समय पर तारित है। संपादित करें: क्या आपको किसी ऑब्जेक्ट रूपांतरण के लिए निहित कनवर्टर का आह्वान करने का कुछ सामान्य तरीका होना चाहिए? या यह एक विशेष मामला है कि आप एक अलग स्थैतिक विधि या किसी अन्य प्रतिबिंब कॉल को पूर्व निर्धारित विधि या शायद एक विशेष निर्माता को लक्षित करने के इच्छुक होंगे? –
इसी तरह के प्रश्न [यहां] (http://stackoverflow.com/questions/4501469/c-sharp-implicit-cast-overloading-and-reflection-problem) –
प्रतिबिंब के माध्यम से लागू कास्टिंग असंभव है लेकिन आप [TypeConvertor] का उपयोग कर सकते हैं (http://msdn.microsoft.com/en-us/library/98bbex99.aspx#the_typeconverter_class)। –