【发布时间】:2018-02-01 14:20:01
【问题描述】:
C# 7.2 为方法参数添加了只读结构和 in 修饰符。但是,当您尝试在 lambda 表达式中使用具有类引用语义的这些结构时,会出现编译器错误:
public readonly struct Point {
public Struct(int x, int y) {
X = x;
Y = y;
}
public int X { get; }
public int Y { get; }
}
public IEnumerable<Point> FindMatching(
this IEnumerable<Point> points,
in Point toMatch) {
return point.Where(p => p.X == point.X && p.Y == point.Y);
}
编译返回错误:
错误 CS1628:不能在匿名方法、lambda 表达式或查询表达式中使用 ref 或 out 参数“toMatch”。
但是,它不是 ref 或 out 参数。
【问题讨论】:
-
@Servy 我不同意那个重复;它不是问为什么我们不能在这里使用
ref/out。它专门询问 C# 7.2 功能,因此 2009 年的答案不可能直接回答这个问题 -
@Servy 我在这里根本不同意你的观点
-
@MarcGravell 您如何看待副本无法回答问题?它没有回答问题怎么办?
-
@Servy 因为这个问题解释了为什么你不能在 lambda 中使用
ref/out。 “当我使用in时为什么它抱怨ref/out”的答案很简单:因为in实际上是ref。指向那个答案根本没有回答那个。特别是考虑到编译器消息非常混乱并且在这里没有帮助。我同意它们是密切相关的问题,但它们并不相同。 -
该问题说明了一条错误消息并且没有提出任何问题。我们只能推断问题是为什么会产生错误,或者为什么会产生 that 错误。作为重复关闭是否正确取决于此。
标签: c#