özellik için setvalue yöntemi bulunamıyor [yinelenen]
Herhangi bir nesnedeki tüm alanları yinelemenin bir yolunu bulmaya çalışıyorum.
Öncelikle değer alanlarını elde etmek ve yazdırmak için projeksiyon kullanmayı denedim, bu iyi çalıştı:
var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" };
foreach (PropertyInfo property in ob.GetType().GetProperties())
{
Console.WriteLine(property.Name + " val " + property.GetValue(ob));
}
Bununla birlikte, elbette, alanları bazı yeni değerlere ayarlamak istiyorum, bu yüzden üzerine okuduktan sonra, bunun işe yaraması gerekiyor gibi görünüyor:
foreach (PropertyInfo property in ob.GetType().GetProperties())
{
property.SetValue(ob,"new String");
}
Bu bana "özellik seti yöntemi bulunamadı" veriyor. Ayrıca bazı yerlerde yapılan bir argüman olarak boş vermeyi deniyorum:
property.SetValue(ob,"new String",null);
Bu aynı sonuçlara sahiptir. Bu neden bende başarısız oluyor?
DÜZENLEME: Amacımı yeterince tanımlamadığım bana işaret edildi. Yukarıda belirtildiği gibi amaç, tıpkı bu örnek nesne gibi, herhangi bir nesnedeki alanlar arasında yineleme yapmaktır:
var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" };
Ve sonra da orijinal soruda, "Alanları bazı yeni değerlere ayarlamak istiyorum" yazıyorum, bu, "ob" nesnesindeki alanlar arasında yineleme yapmak ve onları yeni bir değere ayarlamak istediğim anlamına geliyor.
teşekkür ederim
Yanıtlar
Bu neden bende başarısız oluyor?
Yazmakla aynı sebepten dolayı
ob.DeclarativeSecn = "new value";
en azından verdiğiniz örnek için derleme zamanında başarısız olur. Nesneniz anonim bir türdür ve anonim türlerdeki özelliklerin yalnızca alıcıları vardır - özellikler için yeni değerler belirlemenize izin vermezler. Daha sonra özellikleri değiştirebilmek istiyorsanız, anonim türleri kullanmayın.
Sorunuzun herhangi bir nesnenin özelliklerini yinelemekten bahsettiğini unutmayın , ancak:
- Yazdırırken, tüm özelliklerin alıcıları olduğunu varsayarsınız; bu genellikle doğrudur, ancak her zaman değil
- Yeni değerler belirlerken, tüm özelliklerin alıcıları olduğunu ve bunların dize özellikleri olduğunu varsayarsınız.
Bu varsayımların hiçbiri genel olarak doğru değildir . Dolayısıyla , herhangi bir nesneyi idare edebilmek istiyorsanız , daha fazla kontrol eklemeniz gerekir.
Anonim türler , önce bir türü açıkça tanımlamaya gerek kalmadan bir dizi salt okunur özelliği tek bir nesnede kapsüllemek için uygun bir yol sağlar .
Vurgu benim.
Görünüşe göre salt okunur bir özellik için bir değer ayarlayamazsınız. Mantıklı geliyor.