我有一个如下代码:
struct A
{
void SomeMethod()
{
var items = Enumerable.Range(0, 10).Where(i => i == _field);
}
int _field;
}
Run Code Online (Sandbox Code Playgroud)
...然后我得到以下编译器错误:
struct A
{
void SomeMethod()
{
var items = Enumerable.Range(0, 10).Where(i => i == _field);
}
int _field;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这里发生了什么.
seh*_*ehe 15
变量由参考捕获(即使它们是实际值类型;拳击完成然后).
但是,this在ValueType(struct)中无法装箱,因此无法捕获它.
Eric Lippert有一篇关于捕获ValueTypes的惊喜的文章.让我找到链接
请注意Chris Sinclair的评论:
作为快速修复,您可以将结构存储在本地变量中:
A thisA = this; var items = Enumerable.Range(0, 10).Where(i => i == thisA._field);- Chris Sinclair 4分钟前
当心,这创造令人惊讶的情况下事实:认同的thisA是不一样的this.更明确地说,如果你选择将lambda保持更长时间,它将通过引用捕获盒装副本 thisA,而不是SomeMethod被调用的实际实例.
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |