问题标签 [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.
c# - C# 反思:FieldInfo.SetValue() 和 FieldInfo.SetValueDirect() 有什么区别?
我能够找到的FieldInfo
文档没有比较和对比这两种方法。我有兴趣了解什么时候应该使用另一个(最好使用一个小代码片段)。
c# - 获取类中的字段的值,该字段也是另一个类中的字段
所以,让我们从代码开始,这样我可以更好地解释自己。我有 MyClass 类,其中包含一个 int 字段,Foo 类也包含 MyClass 作为字段。我想使用反射从 MyClass 获取 int 字段的值。
当我使用
问题是如何获得 f.myClass.Integer 的值?
在此先感谢,
保罗
vb.net - 如何获取 Friend WithEvents 成员的 fieldInfo?
我在 vb.net 表单 MyForm 中定义了以下成员:
我正在尝试使用以下代码获取此成员:
,但我总是一无所获。如果我尝试:
,我确实得到了会员,但我无法得到它的价值。
是否需要使用其他 BindingFlags 来获取具有 Friend WithEvents 修饰符的成员的 FieldInfo?
scala - 将 Swagger 与 scala-activerecord 一起使用
我有这样的活动记录:
我添加了 Swagger 注释:
生成的模式包含很多垃圾,使其无法使用:
我查看了源代码swagger-core
。有ModelPropertyParser
一个方法parseRecursive
包含:
当我运行时:
这是正确的,因为我只声明了一个字段。
当我运行时:
ActiveRecord 有很多内部字段。有没有办法摆脱这种垃圾?我只需要fieldInfo
在招摇描述中包含以下字段:
c# - 如何从值中获取字段的FieldInfo
我想访问 FieldInfo、字段上的 CustomAttributes 以及其他目的,但我不希望使用字符串来访问该字段,也不必遍历类中的所有字段。
如果我只是有,
我知道我可以通过“GetField”函数直接访问“myInt”的FieldInfo,如果我有它的名称字符串,或者循环通过“GetFields”,这将再次依赖于字符串“myInt”来确保你' ve 正确的领域。
是否有任何可用的魔法,例如ref myInt
, 或out myInt
,或一些我还不知道的关键字可以让我访问,或者我是否仅限于需要字符串名称来获取它?
c# - 如何在没有字符串比较的情况下获取类的函数的MethodInfo
与我之前的问题类似,当我询问获取字段的 FieldInfo 时,如何从 value 中获取字段的 FieldInfo,从那里的答案中,我编译了这个帮助程序类,
使用. GetMemberInfo(this, c => c.myInt
_ GetMemberInfo(this, c => c.testFunction)
_GetMemberInfo(this, c => c.testFunction())
有没有什么办法,没有字符串比较,我可以从GetMethods()
运行中获取成员信息,或者GetMethod("testFunction")
?
c# - 从类内的变量字段中获取值()
假设我有一个简单的类:
现在我想遍历此类实例的字段并访问该字段的字段(Field-Ception!)并将值分配给正确类型的变量,有效地“包装”该字段以便它可以序列化。在这里,我将到达 Vector3 字段“myVector3”,到达它后,检查它的字段并将它们的值分配给三个浮点数(Vector3 的组成部分)。
问题?字段信息。GetValue()
返回类型MonoField
!如果我使用 fieldinfo. FieldType
,它返回Vector3
,但这对我没有帮助,因为我需要价值:/
c# - C#如何在没有手动类型转换的情况下调用FieldInfo.SetValue函数
我想将数据类实例保存到数据库并从数据库中加载它。我想自动生成 sql 命令。所以,我认为我需要使用 dictionary< string, string> 来解决它。
参考我的老问题:如何将 2D 字符串数组转换为 2D [int, double, bool, ..] 数组?
像这样的工作过程。
- 将数据类实例转换为字典<字符串,字符串>。
- 保存/加载字典到/从 txt、数据库等。
- 将字典转换为数据类实例
我想我已经解决了这个问题。但我认为转换二维数组方法仍然不是一个完美的方法。我想知道,当我调用 FieldInfo.SetValue 函数时,是否有另一种方法来解决类型转换,而无需像我的解决方案那样使用 switch/case 状态。
帮我简化我的代码。
像这样的数据类
像这样的主要代码
并且,像这样的 SetFieldValue 函数
这都是我的代码的一部分。
c# - 从 FieldInfo 获取容器类实例
我在这里使用 C# 反射:我有一个属性的 FieldInfo,我想获取它所属的类的实例(这样我就可以访问另一个属性的内容):
例如上这堂课:
在我拥有的代码的某些部分
这可能吗 ?
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在这篇文章 中建议的使用通用“访问器”类的方法添加了结果。