获取"不能在匿名方法,lambda表达式或查询表达式中使用ref或out参数"对于" in"参数

时间:2018-02-01 14:20:01

标签: c#

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参数。

1 个答案:

答案 0 :(得分:3)

在幕后,in 一个ref参数,但具有花哨的语义。与out相同的是具有奇特语义的ref参数。编译器消息可能更清晰 - 也许 - 这可能是一个很好的bug to log on the Roslyn github。但是:错误是正确的。我同意该错误应明确提及in个参数。