1
8
我现在看到了潜在的问题。它比我最初想象的要深。基本上,解决方案是在序列化表达式树之前修改它,将不依赖于参数的所有子树替换为常量节点。这显然被称为“漏斗化”。 有个解释 here . |
2
2
再做一次闭幕… 比如说:
我还没有测试过它,因为目前我还没有访问到vs,但通常情况下,这就是我解决这个问题的方法。 |
3
1
lambda会自动“吸吮”局部变量,恐怕这只是它们定义的工作方式。 |
4
0
这是一个非常常见的问题,即变量被无意中的闭包修改-一个更简单的解决方案就是:
如果您使用的是Resharper,它实际上会识别代码中有可能导致意外副作用的地方,比如这个-所以如果文件是“全部绿色”,那么您的代码应该是正常的。 我认为在某些方面,如果我们能用一些句法上的糖分来处理这种情况,这样我们就可以把它写成一行程序,也就是说。
其中,某些前缀运算符将导致在构造匿名委托/函数之前对变量的值进行计算。 |
5
0
现在我发现问题了:lambda引用了可能无法序列化的包含类。然后这样做:
(注意静态关键字。)那么lambda不需要引用包含类。 |
6
0
这里已经有几个答案解释了如何避免lambda“提升”变量。不幸的是,这并不能解决您的根本问题。无法序列化lambda与lambda“提升”变量无关。如果lambda表达式需要一个非序列化类的实例来计算,那么它完全可以理解为无法序列化。 根据您实际要做的(我不能完全从您的帖子中决定),解决方案是将lambda的不可序列化部分移出。 例如,而不是:
用途:
|
7
-1
这个怎么样?
|
8
-1
怎么样:
? |
9
-1
好吧,如果我们在这里讨论“问题”,lambda来自函数式编程世界,在纯函数式编程语言中, 没有工作分配 所以你的问题永远不会出现,因为前缀的值永远不会改变。我理解C认为从功能程序中导入想法很酷(因为FP 是 酷!但是很难让它变得漂亮,因为C是并且将永远是一种命令式编程语言。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |