के लिए अलग तरह से व्यवहार करती है यहाँ एक DynamicDataObject
वर्ग से DynamicObject
DynamicObject शून्य मान
public class DynamicDataObject : DynamicObject
{
private readonly Dictionary<string, object> _dataDictionary = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return _dataDictionary.TryGetValue(binder.Name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (!_dataDictionary.ContainsKey(binder.Name))
{
_dataDictionary.Add(binder.Name, value);
return true;
}
return false;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return _dataDictionary.Keys;
}
}
ली गई है और मैं DynamicDataObject
नीचे की तरह लेने वाली हूँ।
public MainWindow()
{
InitializeComponent();
dynamic person = new DynamicDataObject();
person.FirstName = "Vimal";
person.LastName = "Adams";
person.Address = null;
}
मैं person
के सभी सदस्यों को देख सकते हैं और यह _dataDictionary
में मान है, लेकिन एक ही समय में डिबगर दृश्य शामिल नहीं सदस्यों null
मूल्य हो रही है। ताकि person.Address
सदस्य गतिशील दृश्य संग्रह में दिखाई नहीं दे रहा है। (कृपया नीचे स्क्रीनशॉट देखें)। क्या कोई मुझे इस समझ में मदद कर सकता है कि DynamicObject
इस परिदृश्य में अलग-अलग व्यवहार क्यों करता है?
कुछ बिंदु डेवलपर को जानबूझकर शून्य से संपत्ति को सेट करना है। इसका मतलब यह नहीं है कि कुछ अनुकूलन के कारण इसे सूची में नहीं दिखाना चाहिए। फिर जब हम LINQ लिखते हैं तो वही व्यवहार काम करना चाहिए। इसके अलावा यह मान प्रकार के सदस्य को दिखा रहा है यदि मैं डिफ़ॉल्ट मान 0 के साथ एक इंट प्रॉपर्टी सेट कर रहा हूं। तो आपकी धारणा गलत है जैसे: person.Age = 0 –
मैंने बस यही सोचा ताकि मैं इसका परीक्षण कर सकूं। ऐसा लगता है कि यह सिर्फ 'शून्य' के लिए जाँच करता है। –