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:无法使用参考或输出参数&#39; toMatch&#39;在匿名方法,lambda表达式或查询表达式中。
然而,它不是ref或out参数。
答案 0 :(得分:3)
在幕后,in
是一个ref
参数,但具有花哨的语义。与out
相同的是具有奇特语义的ref
参数。编译器消息可能更清晰 - 也许 - 这可能是一个很好的bug to log on the Roslyn github。但是:错误是正确的。我同意该错误应明确提及in
个参数。