问题标签 [fieldinfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5293 浏览

c# - C# 反思:FieldInfo.SetValue() 和 FieldInfo.SetValueDirect() 有什么区别?

我能够找到的FieldInfo文档没有比较和对比这两种方法。我有兴趣了解什么时候应该使用另一个(最好使用一个小代码片段)。

0 投票
1 回答
58 浏览

c# - 获取类中的字段的值,该字段也是另一个类中的字段

所以,让我们从代码开始,这样我可以更好地解释自己。我有 MyClass 类,其中包含一个 int 字段,Foo 类也包含 MyClass 作为字段。我想使用反射从 MyClass 获取 int 字段的值。

当我使用

问题是如何获得 f.myClass.Integer 的值?
在此先感谢,
保罗

0 投票
1 回答
479 浏览

vb.net - 如何获取 Friend WithEvents 成员的 fieldInfo?

我在 vb.net 表单 MyForm 中定义了以下成员:

我正在尝试使用以下代码获取此成员:

,但我总是一无所获。如果我尝试:

,我确实得到了会员,但我无法得到它的价值。

是否需要使用其他 BindingFlags 来获取具有 Friend WithEvents 修饰符的成员的 FieldInfo?

0 投票
1 回答
134 浏览

scala - 将 Swagger 与 scala-activerecord 一起使用

我有这样的活动记录:

我添加了 Swagger 注释:

生成的模式包含很多垃圾,使其无法使用:

我查看了源代码swagger-core。有ModelPropertyParser一个方法parseRecursive包含:

当我运行时:

这是正确的,因为我只声明了一个字段。

当我运行时:

ActiveRecord 有很多内部字段。有没有办法摆脱这种垃圾?我只需要fieldInfo在招摇描述中包含以下字段:

0 投票
2 回答
1750 浏览

c# - 如何从值中获取字段的FieldInfo

我想访问 FieldInfo、字段上的 CustomAttributes 以及其他目的,但我不希望使用字符串来访问该字段,也不必遍历类中的所有字段。

如果我只是有,

我知道我可以通过“GetField”函数直接访问“myInt”的FieldInfo,如果我有它的名称字符串,或者循环通过“GetFields”,这将再次依赖于字符串“myInt”来确保你' ve 正确的领域。

是否有任何可用的魔法,例如ref myInt, 或out myInt,或一些我还不知道的关键字可以让我访问,或者我是否仅限于需要字符串名称来获取它?

0 投票
1 回答
538 浏览

c# - 如何在没有字符串比较的情况下获取类的函数的MethodInfo

与我之前的问题类似,当我询问获取字段的 FieldInfo 时,如何从 value 中获取字段的 FieldInfo,从那里的答案中,我编译了这个帮助程序类,

使用. GetMemberInfo(this, c => c.myInt_ GetMemberInfo(this, c => c.testFunction)_GetMemberInfo(this, c => c.testFunction())

有没有什么办法,没有字符串比较,我可以从GetMethods()运行中获取成员信息,或者GetMethod("testFunction")

0 投票
1 回答
1485 浏览

c# - 从类内的变量字段中获取值()

假设我有一个简单的类:

现在我想遍历此类实例的字段并访问该字段的字段(Field-Ception!)并将值分配给正确类型的变量,有效地“包装”该字段以便它可以序列化。在这里,我将到达 Vector3 字段“myVector3”,到达它后,检查它的字段并将它们的值分配给三个浮点数(Vector3 的组成部分)。

问题?字段信息。GetValue()返回类型MonoField!如果我使用 fieldinfo. FieldType,它返回Vector3,但这对我没有帮助,因为我需要价值:/

0 投票
1 回答
2111 浏览

c# - C#如何在没有手动类型转换的情况下调用FieldInfo.SetValue函数

我想将数据类实例保存到数据库并从数据库中加载它。我想自动生成 sql 命令。所以,我认为我需要使用 dictionary< string, string> 来解决它。

参考我的老问题:如何将 2D 字符串数组转换为 2D [int, double, bool, ..] 数组?

像这样的工作过程。

  1. 将数据类实例转换为字典<字符串,字符串>。
  2. 保存/加载字典到/从 txt、数据库等。
  3. 将字典转换为数据类实例

我想我已经解决了这个问题。但我认为转换二维数组方法仍然不是一个完美的方法。我想知道,当我调用 FieldInfo.SetValue 函数时,是否有另一种方法来解决类型转换,而无需像我的解决方案那样使用 switch/case 状态。

帮我简化我的代码。

像这样的数据类

像这样的主要代码

并且,像这样的 SetFieldValue 函数

这都是我的代码的一部分。

0 投票
2 回答
927 浏览

c# - 从 FieldInfo 获取容器类实例

我在这里使用 C# 反射:我有一个属性的 FieldInfo,我想获取它所属的类的实例(这样我就可以访问另一个属性的内容):

例如上这堂课:

在我拥有的代码的某些部分

这可能吗 ?

0 投票
1 回答
1228 浏览

c# - 基类中带有表达式树的字段 getter/setter

按照这篇文章的示例及其后续问题,我正在尝试使用已编译的表达式创建字段获取器/设置器。

getter 工作得很好,但我被 setter 卡住了,因为我需要 setter 来分配任何类型的字段。

这是我的 setter-action 构建器:

现在,我将通用设置器存储到缓存列表中(因为当然,每次构建设置器都是性能杀手),在那里我将它们转换为简单的“对象”:

现在我尝试设置这样的字段值:

我可以简单地调用一个通用方法并每次强制转换,但我担心性能开销......有什么建议吗?

-编辑的答案 基于安德森先生的回答,我创建了一个小型测试程序,它比较直接设置值、缓存反射(缓存 FieldInfo 的位置)和缓存的多类型代码。我使用具有多达 3 级继承 ( ObjectC : ObjectB : ObjectA) 的对象继承。

可以在此处找到示例的完整代码。

测试的单次迭代给出以下输出:

当然,这只是显示了创建对象的成本——这使我们能够测量创建反射和表达式的缓存版本的偏移量。

接下来,让我们运行 1.000.000 次:

为了完整起见:我删除了对“set”方法的调用,以突出获取 setter 的成本(FieldInfo对于反射方法,Action<object, object>对于表达式案例)。结果如下:

注意:这里的时间增加不是因为较大字典的访问时间较慢(因为它们有O(1)访问时间),而是因为我们访问它的次数增加了(每次迭代 4 次ObjectA,8 for ObjectB, 12 for ObjectC)... 正如我们所看到的,这里只有创建偏移量会有所不同(这是意料之中的)。

底线:我们确实将性能提高了 2 倍或更多,但距离直接字段集的性能还很远……在列表中检索正确的 setter 代表了 10% 的好时机。

我会尝试用表达式树代替 Reflection.Emit 看看我们是否可以进一步缩小差距......任何评论都非常受欢迎。

编辑 2我使用Eli Arbel这篇文章 中建议的使用通用“访问器”类的方法添加了结果。