我目前正在尝试将Xamarin.iOS应用程序库转换为PCL。我有这个不能编译的代码:
private void SetPrivateField<T>(object item, string fieldName, object value) {
typeof(T).GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(item, value);
}
正如您所看到的,我正在尝试为某个类型设置私有字段。还有另一种方式吗?
修改 这编译。它会做同样的事情吗?
private void SetPrivateField<T>(object item, string fieldName, object value) {
typeof(T).GetRuntimeField(fieldName).SetValue(item,value);
}
答案 0 :(得分:6)
这最终成为了正确的代码。
private void SetPrivateField<T>(object item, string fieldName, object value) {
typeof(T).GetTypeInfo().GetDeclaredField(fieldName).SetValue(item,value);
}
答案 1 :(得分:2)
针对较新平台的Portable Class Libraries中的反射API是不同的。请参阅以下链接,了解有关我们为何如此操作以及如何使用新API的一些信息: