获取受保护字段的值



我的方法正在从第三方代码中作为参数传递一个对象。有问题的类被称为:SqlExpression<T>

此类具有以下受保护字段:

protected List<ModelDefinition> tableDefs = new List<ModelDefinition>();

我需要该属性中的信息,但我已经检查了类,并且没有公共访问器。

我试着制作一个儿童课程:

public class SqlExpressionExtension<T> : SqlExpression<T>
{
public SqlExpressionExtension(IOrmLiteDialectProvider dialectProvider) : base(dialectProvider)
{
}
public List<Type> GeTableTypes()
{
return this.tableDefs.Select(x => x.ModelType).ToList();
}
}

然后像这样将SqlExpression<T>铸造为SqlExpressionExtension<T>

var types = ((SqlExpressionExtension<T>)query).GeTableTypes();

但我得到一个例外,它无法强制转换类型。

获取这些数据的正确方法是什么?

您可以使用反射来获取字段:

获取类型:

var queryType = query.GetType();

然后获取FieldInfo:

var tableDefsField = queryType.GetField("tableDefs", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

最后得到字段的值:

var tableDefs = (List<ModelDefinition>)tableDefsField.GetValue(query);

但是,像以这种方式使用反射一样,因为它不是公共的,所以不能保证它在SqlExpression<T>

最新更新