için farklı davranır olduğunu DynamicObject
DynamicObject İşte boş değerler
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;
}
}
türetilmiş bir DynamicDataObject
sınıf ve aşağıda gibi DynamicDataObject
tüketen ediyorum.
public MainWindow()
{
InitializeComponent();
dynamic person = new DynamicDataObject();
person.FirstName = "Vimal";
person.LastName = "Adams";
person.Address = null;
}
Ben person
tüm üyelerini görebilir ve _dataDictionary
değerleri var ama aynı zamanda ayıklayıcı görünümü null
değeri olan üyeler hariç tutar. Böylece person.Address
üyesi dinamik görünüm koleksiyonunda görünmez. (Lütfen aşağıdaki ekran görüntüsüne bakın). Bu senaryoda neden DynamicObject
'un neden farklı davrandığını anlamama yardımcı olabilir misiniz?
Bazı nokta geliştiricilerin, bir özelliği bilinçli olarak sıfırlamak zorunda bırakması gerekir. Bu, bazı optimizasyon nedeniyle listede görünmemesi gerektiği anlamına gelmez. Sonra aynı davranış LINQ da yazarken de işe yarayacak. Ayrıca, varsayılan değeri 0 olan bir int özelliği ayarlıyorsam, değer türünün bir üyesi de gösteriliyor. Yani, varsayımın yanlış olduğu mesela: person.Age = 0 –
Ben de aynı şeyi düşündüm. Görünüşe göre sadece "null" kontrol ediyor. –