मैं हाल ही में dynamic
कीवर्ड के साथ एक अजीब व्यवहार में आया हूं जबकि मैं कुछ परीक्षण कर रहा था। यह एक समस्या के रूप में मैं सख्त मैं सिर्फ प्रयोग किया गया था को सुलझाने की जरूरत नहीं है, लेकिन मैं सोच रहा था कि अगर किसी को भी क्याबिल्डर पैटर्न के साथ "डायनामिक" कीवर्ड एक्सटेंशन विधि छुपाता है
हो रहा था मैं एक बिल्डर जो एक HttpWebRequest
वस्तु और HttpWebRequest
पर एक विस्तार विधि देता है पर किसी भी प्रकाश डाला सकता है।
मेरे बिल्डर विधियों में से एक string
तर्क लेता है। जब मैं बिल्डर विधि को एक स्ट्रिंग पास करता हूं तो पूरी चीज काम करती है, लेकिन मैं इसे dynamic
वैरिएबल पास करता हूं जो एक स्ट्रिंग है जो अब काम नहीं करती है।
ऐसा लगता है कि बिल्डर्स विधि जो HttpWebRequestBuilder
टाइप करना चाहिए अब dynamic
लौटाता है।
नीचे कोड एक सरल यह पुन: पेश करने के लिए था और यह भी उपलब्ध है here
नोट
यह काम कर, लाइन .SetBody(dynamicString)
बाहर टिप्पणी और लाइन .SetBody(json)
uncomment करने के लिए।
public class Program
{
public static void Main()
{
dynamic dynamicString = "{ \"test\" : \"value\" }";
string json = "{ \"test\" : \"value\" }";
string test = new HttpWebRequestBuilder()
.SetRequestType()
//.SetBody(json) //uncomment this and it works
.SetBody(dynamicString) //uncomment this and it breaks
.Build()
.ExtensionMethod();
Console.WriteLine(test);
}
}
public class HttpWebRequestBuilder
{
private readonly HttpWebRequest _request;
public HttpWebRequestBuilder()
{
Uri uri = new Uri("http://www.google.com");
_request = WebRequest.CreateHttp(uri);
}
public HttpWebRequestBuilder SetRequestType()
{
_request.Method = "POST";
_request.ContentType = "application/json";
return this;
}
public HttpWebRequestBuilder SetBody(string json)
{
byte[] bytes = Encoding.UTF8.GetBytes(json);
_request.ContentLength = bytes.Length;
using (Stream writer = _request.GetRequestStream())
{
writer.Write(bytes, 0, bytes.Length);
writer.Flush();
}
return this;
}
public HttpWebRequest Build()
{
return _request;
}
}
public static class WebRequestExtensions
{
public static string ExtensionMethod(this HttpWebRequest webRequest)
{
return "extension method worked";
}
}
मेरा अनुमान है कि यह कुछ रास्ता dynamic
वस्तुओं काम के साथ अजीब है। लेकिन किसी भी स्पष्टीकरण की सराहना की जाएगी।
मैं अतीत में एरिक की है कि इसका जवाब पढ़ते हैं, लेकिन मैं पूरी तरह भूल गया इसके बारे में:/ –