mevcut cevaplar gayet yoktur unutmayın; sadece alternatif bir perspektif: birçok senaryoda, çalışma zamanı özellik senaryoları için izin verdiği gibi doğrudan yansımadan ziyade System.ComponentModel kullanılması arzu edilir - yani DataTable'ın DataView sütunları özellikleri olarak gösterir.
Performans bilgisi - varsayılan olarak büyük ölçüde aynıdır, ancak bunun çoğunu yapıyorsanız (örneğin, toplu veri içe aktarma/dışa aktarma), aslında bu yaklaşımı kullanarak HyperDescriptor izniyle önemli performans artışları elde edebilirsiniz. System.ComponentModel kullanmak için
, kod benzer, ancak ustaca farklıdır: Eğer "Address.ZipCode" bağlanma veri bağlama kullanıldığı sanki bu daha sonra sana aynı tutuşu sağlar
static void Main()
{
object obj = new Customer { Address = new Address { ZipCode = "abcdef" } };
object address = GetValue(obj, "Address");
object zip = GetValue(address, "ZipCode");
Console.WriteLine(zip);
}
static object GetValue(object component, string propertyName)
{
return TypeDescriptor.GetProperties(component)[propertyName].GetValue(component);
}
(Listeler vb. (Bu veri bağlayıcı kullanımları ele aynı listede dahil) derin bir yoldan değeri elde etmek
(bunu beklenen türüdür biliyorsanız dize vb zip düşürebilir notu)
, olur gibi bir şey kullanın:
static object ResolveValue(object component, string path) {
foreach(string segment in path.Split('.')) {
if (component == null) return null;
if(component is IListSource) {
component = ((IListSource)component).GetList();
}
if (component is IList) {
component = ((IList)component)[0];
}
component = GetValue(component, segment);
}
return component;
}
kabaca davranışını aynalar liste şeyler düzenli veri bağlama
Nice answer! ... Superlike. – Hrishi