可移植类库反射GetField

时间:2013-12-10 22:11:32

标签: c# .net xamarin.ios portable-class-library

我目前正在尝试将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);
 }

2 个答案:

答案 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的一些信息: