Почему функции C# 7.2 не компилируются в приложении UWP?

... особенно, in (readonly ref) параметры. Вот моя ситуация:

У меня есть проект UWP и проект UWP Unit Test в том же решении Visual Studio. Оба проекта предназначены для C# 7.2. Основной проект UWP имеет этот класс (обратите внимание на in параметры):

public struct Cell
{
    public Cell(int x, int y)
    {
        X = x;
        Y = y;
    }

    public int X { get; }

    public int Y { get; }

    public static Cell operator +(in Cell left, in Cell right)
    {
        return new Cell(left.X + right.X, left.Y + right.Y);
    }

    public static Cell operator -(in Cell left, in Cell right)
    {
        return new Cell(left.X - right.X, left.Y - right.Y);
    }


    public override string ToString() => $"{X}, {Y}";
}

Когда я использую эти операторы из тестового проекта UWP:

    [TestMethod]
    public void TestMethod1()
    {
        Cell cell1 = new Cell(0, 0);
        Cell cell2 = new Cell(1, 1);

        var added = cell1 + cell2 ;
        var minus = cell1 - cell2 ;
    }

Я получил:

UnitTest.cs(16,25,16,38): error CS0019: Operator '+' cannot be applied to operands of type 'Cell' and 'Cell'
UnitTest.cs(17,25,17,38): error CS0019: Operator '-' cannot be applied to operands of type 'Cell' and 'Cell'

Однако то же использование внутри основного проекта UWP не приводит к ошибкам компилятора.

Это почему?

1 ответ

Решение

Есть ошибка компилятора с in в операторах, который теряется при загрузке оператора из другого проекта / сборки.

https://github.com/dotnet/roslyn/pull/23508 (исправление появится в 15.6 превью 3)

https://github.com/dotnet/roslyn/issues/23689 (еще один отчет об этой проблеме)

Другие вопросы по тегам