给定FieldInfo
,可以设置C#readonly
/ CLR InitOnly成员字段。
我何时以及为什么要这样做? 对于序列化程序,我创建了一个对象类型的空实例,然后我填充了数据流中的所有字段。
对于实际问题:
有没有办法使用Linq Expressions实现这一目标?
如果传递指向readonly / initonly字段的表达式,则Expression.Assign
会导致异常。
或者我将不得不求助于IL发射(比FieldInfo更快)
答案 0 :(得分:1)
不,Expression.Assign
检查字段的可分配性,即使你可以破解它来创建赋值表达式,它也不可验证且无法运行。发送IL是最快的方法,它还允许分配指针(LINQ表达式不支持)。您可以看到here如何发出类似的方法。