gpt4 book ai didi

c# - 获取 protected 字段的值

转载 作者:行者123 更新时间:2023-12-02 18:42:02 25 4
gpt4 key购买 nike

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

此类具有以下 protected 字段:

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

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

我尝试创建一个子类:

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 的 future 版本中起作用

关于c# - 获取 protected 字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67879682/

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