Ecco una classe derivata da DynamicDataObject
DynamicObject
DynamicObject si comporta in modo diverso per i valori null
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;
}
}
e sto consumando DynamicDataObject
come qui di seguito.
public MainWindow()
{
InitializeComponent();
dynamic person = new DynamicDataObject();
person.FirstName = "Vimal";
person.LastName = "Adams";
person.Address = null;
}
posso vedere tutti i membri person
ed è valori nella _dataDictionary
ma allo stesso tempo la vista debugger esclude membri avente null
valore. In modo che il membro person.Address
non sia visibile nella raccolta di viste dinamiche (si veda lo screenshot qui sotto). Qualcuno può aiutarmi a capire perché DynamicObject
si comporta diversamente in questo scenario?
Alcuni sviluppatori di punti devono impostare intenzionalmente una proprietà null. Ciò non significa che non dovrebbe essere visualizzato nell'elenco a causa dell'ottimizzazione. Quindi lo stesso comportamento dovrebbe funzionare anche quando scriviamo LINQ. Inoltre sta mostrando membro di tipo valore se sto impostando una proprietà int con valore di default 0. Quindi la tua ipotesi è errata ad esempio: person.Age = 0 –
Ho solo pensato la stessa cosa così ho provato. Sembra che controlli solo per 'null'. –