如何获取某些元数据的私有字段的值?

How do I obtain the value of a private field of some metadata?

我正在使用名为 DevExpress.Xpo 的 NuGet 包,它的 DataStorePool class 有一个私有 int 调用了 connections。我需要以某种方式在另一个 class 中使用它的值,但是 DataStorePool class 被锁定为“元数据”,所以我无法将 int 设置为 public 也没有创​​建一个 returns 的方法。我该怎么做才能获得 int 的值?

您可以创建一个扩展方法来执行此操作。 它可以看起来像这样:

Foo foo = new Foo();
string c = foo.GetFieldValue<string>("_bar");

以及创建方式:

public static class ReflectionExtensions {
    public static T GetFieldValue<T>(this object obj, string name) {
        // Set the flags so that private and public fields from instances will be found
        var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
        var field = obj.GetType().GetField(name, bindingFlags);
        return (T)field?.GetValue(obj);
    }
}

您可以使用 BindingFlags.NonPublic 和 BindingFlags.Instance 标志

FieldInfo[] fields = myType.GetFields(
                         BindingFlags.NonPublic | 
                         BindingFlags.Instance);

You could read how to get it with using reflection here