जब मैं के साथ सी # 4.0 गतिशील खेल रहे हैं, मैंने पाया विचित्र बातें इस तरह कोड के साथ हो रहा:सिस्टम। गतिशील बग?
screenshot http://img717.imageshack.us/img717/4914/10435230.png
:using System.Dynamic;
sealed class Foo : DynamicObject
{
public override bool TryInvoke(
InvokeBinder binder, object[] args, out object result)
{
result = new object();
return true;
}
static void Main()
{
dynamic foo = new Foo();
var t1 = foo(0);
var t2 = foo(0);
var t3 = foo(0);
var t4 = foo(0);
var t5 = foo(0);
}
}
ठीक है, यह काम करता है लेकिन ... IntelliTrace खिड़की पर एक नज़र
तो प्रत्येक आमंत्रण (और गतिशील वस्तु पर भी अन्य परिचालन) दो बार अजीब अपवाद फेंकने और पकड़ने का कारण बनता है!
मैं समझता हूं कि कभी-कभी अपवाद तंत्र ऑप्टिमाइज़ेशन के लिए उपयोग किया जा सकता है, उदाहरण के लिए गतिशील को पहले कॉल कुछ स्टब प्रतिनिधि को किया जा सकता है, जो बस अपवाद फेंकता है - यह एक सही सदस्य को हल करने के लिए गतिशील बाइंडर के संकेत की तरह हो सकता है और प्रतिनिधियों को फिर से इंगित करें। उसी प्रतिनिधि को अगली कॉल बिना किसी चेक के किया जाएगा।
लेकिन ... उपरोक्त कोड का व्यवहार बहुत अजीब लग रहा है। हो सकता है कि डायनामिक ऑब्जेक्ट पर किसी भी ऑपरेशन के बाद दो बार अपवाद फेंकना और पकड़ना - एक बग है?
स्क्रीनशॉट गुम;) – TomTom
अजीब, सभी, मेरे लिए ठीक है ... imageshack के लिए फिर से अपलोड की गई THX – ControlFlow