使用 Linq 表达式设置 readoly/InitOnly 成员字段

Set a readoly/InitOnly member field using Linq Expressions

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

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

实际问题:

是否也有使用 Linq 表达式实现此目的的方法? 如果传递指向 readonly/initonly 字段的表达式,Expression.Assign 会导致异常。

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

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