使用Linq Expressions设置readonly /InitOnly成员字段



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

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

到实际问题:

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

或者我必须诉诸IL emit来做到这一点(比FieldInfo更快)

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