मैं DynamicObject
के साथ प्रयोग कर रहा हूं। मैं जो चीजों को करने का प्रयास करता हूं उनमें से एक है नीचे दिए गए कोड में दिखाए गए अनुसार ref
/out
तर्कों के मान सेट करना। हालांकि, Main()
में i
और j
के मानों को ठीक से सेट करने में सक्षम नहीं है (भले ही वे TryInvokeMember()
में सही ढंग से सेट हों)। क्या किसी को पता है कि DynamicObject
ऑब्जेक्ट को ref
/out
तर्कों के साथ कैसे कॉल करें और विधि के अंदर सेट मानों को पुनर्प्राप्त करने में सक्षम हो?सी # 4.0 'गतिशील' रेफ/आउट तर्क सेट नहीं करता
class Program
{
static void Main(string[] args)
{
dynamic proxy = new Proxy(new Target());
int i = 10;
int j = 20;
proxy.Wrap(ref i, ref j);
Console.WriteLine(i + ":" + j); // Print "10:20" while expect "20:10"
}
}
class Proxy : DynamicObject
{
private readonly Target target;
public Proxy(Target target)
{
this.target = target;
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
int i = (int) args[0];
int j = (int) args[1];
target.Swap(ref i, ref j);
args[0] = i;
args[1] = j;
result = null;
return true;
}
}
class Target
{
public void Swap(ref int i, ref int j)
{
int tmp = i;
i = j;
j = tmp;
}
}
अद्यतन 7/15: माइक्रोसॉफ्ट की अगली फिल्म के लिए समस्या का समाधान हो करने का दावा नेट http://connect.microsoft.com/VisualStudio/feedback/details/543101/net-4-0s-dynamicobject-doesn-t-set-ref-out-arguments
अद्यतन 2012/09/08: VS.NET 2012 का उपयोग कर परीक्षण किया गया .NET 4.0 और 4.5 दोनों के साथ, पुष्टि करें: यह पहले ही तय हो चुका है।
सटीक डुप्लिकेट: http: // stackoverflow।कॉम/प्रश्न/2268857/सी -4-निर्धारण-पैरामीटर-पास-सेमेंटिक्स-इन-डायनामिक-कॉल – Gabe
@gabe: वास्तव में मैंने यह प्रश्न देखा, लेकिन यह सवाल इस बारे में था कि क्या कोई यह पता लगा सकता है कि कोई पैरामीटर ज्ञात हो सकता है या नहीं रेफ/आउट या नहीं, जो कि मैं यहां पूछ रहा हूं उससे बिल्कुल अलग है। मुझे उस मामले में दिलचस्पी नहीं है क्योंकि मैं 'लक्ष्य' वर्ग में थोड़ा प्रतिबिंब के साथ आ सकता हूं। –
भले ही आपका प्रश्न अलग है, उसके जवाब में आपके प्रश्न का उत्तर शामिल है: * डायनामिक ऑब्जेक्ट "कॉल-बाय-वैल्यू" * – Gabe