gpt4 book ai didi

c# - WP7.1 上的匿名类型和获取访问器?

转载 作者:可可西里 更新时间:2023-11-01 09:09:09 27 4
gpt4 key购买 nike

我正在尝试编写一个简单的对象到字典转换器,如下所示:

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()"}

这只是 Mango 上的安全模型说“不”吗?有什么办法吗?感觉这是一个公共(public) Get 访问器 - 所以感觉我应该能够调用它?

斯图尔特

最佳答案

我猜你的 ToSimplePropertyDictionary 方法和实际用法在两个单独的程序集中。这是问题的根源,因为从匿名类生成的编译器生成的类是 internal。这就是您获得 MethodAccessException 异常的原因。所以你需要使用 InternalsVisibleToAttribute让它工作。这SO question包含有关内部类型和反射的更多信息。

关于c# - WP7.1 上的匿名类型和获取访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8273399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com