2010-10-04 15 views
8

मैं एक अभिव्यक्ति लिखने की कोशिश कर रहा हूं जो किसी संपत्ति पर ToString को कॉल करेगा और इसे स्थानीय चर के लिए मान निर्दिष्ट करेगा। हालांकि, ऑब्जेक्ट इंस्टेंस पर ToString को कॉल करना/ToString का अधिभार, "अबाध मैच मिला" का अपवाद फेंकने का कारण बनता है। यहां एक उदाहरण दिया गया है:अभिव्यक्ति। कॉल और "संदिग्ध मैच मिला"

var result = Expression.Variable(typeof(string), "result"); 
var matchTypeParameter = Expression.Parameter(typeof(MatchType), "matchType"); 
var targetProperty = Expression.Property(leadParameter, target); 

var exp = Expression.Block(
    //Add the local current value variable 
    new[] { result }, 

    //Get the target value 
    Expression.Assign(result, Expression.Call(targetProperty, typeof(string).GetMethod("ToString"), null)) 

); 

उदाहरण के लिए उदाहरण ओवरलोड होने पर मैं ToString को कैसे कॉल कर सकता हूं? धन्यवाद!

उत्तर

13

बदलें:

typeof(string).GetMethod("ToString") 

के साथ:

typeof(string).GetMethod("ToString", Type.EmptyTypes) 

दूसरे शब्दों में, मिल विधि "ToString" है कि शून्य तर्क (खाली प्रकार सरणी) लेता है नाम दिया है।

+1

यह वही था जो मैं ढूंढ रहा था, धन्यवाद! मैंने पहले कभी टाइप नहीं किया है। लक्षण टाइप टाइप करें। क्या कोई प्रतिबिंब पुस्तक है जो इस तरह की चीजों पर चर्चा करती है जिसे आप अनुशंसा करेंगे? –

+0

टाइप। लक्षण टाइप्स सिर्फ 'लघु प्रकार [0] 'से कम शॉर्टेंड (और अधिक कुशलता से अधिक कुशल) है। क्षमा करें, मैं एक पुस्तक व्यक्ति नहीं हूं, लेकिन आप 'MethodInfo', 'FieldInfo', और' Type' (' अभिव्यक्ति 'में सभी विधियों के अतिरिक्त) को स्रोत कोड को सिर्फ एक * बहुत * सीखेंगे। –

+0

धन्यवाद। तुम मेरा दिन बचाओ –

संबंधित मुद्दे