aşağıda gibi sözlük dönüştürücü için basit bir nesneyi yazmaya çalışıyorum:WP7.1'de anonim tipler ve Erişim sağlayıcıları var mı?
public static class SimplePropertyDictionaryExtensionMethods
{
public static IDictionary<string,string> ToSimplePropertyDictionary(this object input)
{
if (input == null)
return new Dictionary<string, string>();
var propertyInfos = from property in input.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.GetProperty)
where property.CanRead
select property;
return propertyInfos.ToDictionary(x => x.Name, x => input.GetPropertyValueAsString(x));
}
public static string GetPropertyValueAsString(this object input, PropertyInfo propertyInfo)
{
var value = propertyInfo.GetGetMethod().Invoke(input, new object[] {});
if (value == null)
return string.Empty ;
return value.ToString();
}
}
Ancak, ben aramaya çalıştığınızda böyle:
var test = (new { Foo="12", Bar=15 }).ToSimplePropertyDictionary();
O zaman bu bir istisna ile başarısız:
[System.MethodAccessException]: {"Attempt to access the method failed: .<>f__AnonymousType0`1.get_Foo()"}
Bu sadece Mango üzerinde "Hayır" yazan güvenlik modeli mi? Etrafında bir yolu var mı? Bu halka açık bir erişimci gibi hissediyor - bu yüzden onu çağırmak mümkün gibi geliyor?
Stuart
Teşekkür ederiz! Bu iyi bir cevap gibi geliyor – Stuart
Bir kazananımız var - teşekkürler! – Stuart
mmm, iyi cevap. BindingFlags.Public özellikleri alırken geçtiği gibi bunu asla düşünmezdim. MSDN, özelliklerin herkese açık olduğunu (ana sınıfın olmaması durumunda garip görünüyor) olsa bile, anonim türde bir iç ise hiçbir özelliğin iade edilemeyeceğini düşünürdüm. – calum