मैं नीचे की तरह शब्दकोश कनवर्टर करने के लिए एक सरल वस्तु लिखने के लिए कोशिश कर रहा हूँ: जब मैं फोन करने के लिए प्रयास करते हैं,बेनामी प्रकार और WP7.1 पर एक्सेसर्स प्राप्त करें?
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();
}
}
हालांकि इस तरह:
var test = (new { Foo="12", Bar=15 }).ToSimplePropertyDictionary();
तो यह एक अपवाद के साथ विफल:
[System.MethodAccessException]: {"Attempt to access the method failed: .<>f__AnonymousType0`1.get_Foo()"}
क्या यह आम पर "सुरक्षा" कहने पर आम सुरक्षा मॉडल है? क्या इसके चारों ओर कोई रास्ता है? ऐसा लगता है कि यह एक सार्वजनिक प्राप्तकर्ता है - तो ऐसा लगता है कि मुझे इसे आमंत्रित करने में सक्षम होना चाहिए?
स्टुअर्ट
धन्यवाद! यह एक अच्छा जवाब की तरह लगता है – Stuart
हमारे पास एक विजेता है - धन्यवाद! – Stuart
मिमी, अच्छा जवाब। मैंने कभी इस बारे में सोचा नहीं होगा कि बाइंडिंगफ्लैग्स। संपत्ति प्राप्त करते समय सार्वजनिक पास हो जाता है। मैंने सोचा होगा कि अज्ञात प्रकार आंतरिक होने पर कोई गुण वापस नहीं किया गया होगा, भले ही एमएसडीएन कहता है कि गुण सार्वजनिक हैं (जो माता-पिता वर्ग नहीं है तो अजीब लगता है)। – calum