给定FieldInfo
,可以设置c# readonly
/CLR InitOnly成员字段。
我什么时候以及为什么要这样做?对于序列化器,我创建对象类型的空实例,然后填充数据流中的所有字段。
到实际问题:
是否有一种方法来实现这使用Linq表达式也?如果传递一个指向readonly/initonly字段的表达式,Expression.Assign
将导致异常。
或者我必须诉诸IL emit来做到这一点(比FieldInfo更快)
不,Expression.Assign
检查字段的可赋值性,即使您可以破解它来创建赋值表达式,它也无法验证并且无法运行。发出IL是最快的方法,它还允许分配指针(LINQ表达式不支持)。在这里可以看到如何发出一个类似的方法。