当前位置: 首页 > 编程语言 > C#

WP7.1上的匿名类型和获取访问器?在WP7.1上共享

时间:2023-04-10 14:09:33 C#

匿名类型和获取访问器?我正在尝试将一个简单的对象写入Dictionary转换器,如下所示:varpropertyInfos=frompropertyininput.GetType().GetProperties(BindingFlags.Instance|BindingFlags.Public|BindingFlags.FlattenHierarchy|BindingFlags.GetProperty)whereproperty.CanRead选择属性;返回propertyInfos.ToDictionary(x=>x.Name,x=>input.GetPropertyValueAsString(x));}publicstaticstringGetPropertyValueAsString(thisobjectinput,PropertyInfopropertyInfo){varvalue=propertyInfo.GetGetMethod().Invoke(input,newobject[]{});if(value==null)returnstring.Empty;返回值.ToString();然而,当我尝试调用它时:vartest=(new{Foo="12",Bar=15}).ToSimplePropertyDictionary();然后失败并出现异常:[System.MethodAccessException]:{"Attempttoa访问方法失败:.f__AnonymousType0`1.get_Foo()"}这只是Mango的安全模型说“不”吗?有什么办法吗?感觉这是一个公共Get访问器-所以感觉我应该能够叫它吗?Stuart我猜你的ToSimplePropertyDictionary方法和实际用法在两个单独的程序集中,这是你问题的根源,因为编译器从匿名类生成的类是内部的。这就是你得到MethodAccessException异常的原因。所以你需要使用InternalsVisibleToAttribute使其工作。这个SO问题有更多关于内部类型和反射的信息。删除BindingFlags.GetProperty这用于在使用InvokeMember时获取属性值,它没有指定你想要返回只读属性。编辑:问题可能实际上是propertyInfo.GetGetMethod()-尝试使用以下之一(我只使用了第一个):以上是C#学习教程:WP7.1上的匿名类型和获取访问器?,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varvalue=propertyInfo.GetValue(input,null);varvalue=propertyInfo.GetGetMethod().Invoke(input,null);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: