【问题标题】:Set a readoly/InitOnly member field using Linq Expressions使用 Linq 表达式设置 readoly/InitOnly 成员字段
【发布时间】:2015-08-23 09:47:32
【问题描述】:

给定一个FieldInfo,可以设置一个C# readonly/CLR InitOnly 成员字段。

我何时以及为什么要这样做? 对于序列化程序,我创建了一个对象类型的空实例,然后填充数据流中的所有字段。

到实际问题:

还有没有办法使用 Linq 表达式来实现这一点? 如果您传递指向 readonly/initonly 字段的表达式,Expression.Assign 会导致异常。

或者我是否必须求助于 IL emit 来执行此操作(比 FieldInfo 更快)

【问题讨论】:

  • 我对 LINQ 不是很熟悉,但是有没有办法在初始化时(即在创建对象时)只分配初始化字段,而不是事后尝试?

标签: c# reflection il linq-expressions


【解决方案1】:

不,Expression.Assign 检查字段的可赋值性,即使您可以破解它来创建赋值表达式,它也无法验证并且无法运行。发出 IL 是最快的方法,它还允许分配指针(LINQ 表达式不支持)。你可以看看here如何发出类似的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多