В C# 7.2 я могу использовать `in` аргументы в делегатах, интерфейсах или абстрактных классах?

Я заметил, что при создании интерфейса, делегата или абстрактного метода с in В качестве аргумента я получаю ошибку компилятора (CS0518: предопределенный тип 'System.Runtime.InteropServices.InAttribute' не определен или не импортирован). Сообщение об ошибке не очень поучительно для меня. Я что-то не так делаю, или это не поддерживается? Если я не прочитал это, документация предполагает, что должно работать:

Модификатор in может применяться к любому члену, который принимает параметры: методы, делегаты, лямбда-выражения, локальные функции, индексаторы, операторы.

Смотрите ниже пример:

public class Parser
{
    // Works
    public bool Parse(in ReadOnlySpan<char> span) => false;
}

public interface IParser
{
    // CS0518: Predefined type 'System.Runtime.InteropServices.InAttribute' is not defined or imported
    bool Parse(in ReadOnlySpan<char> span);
}

public abstract class AbstractParser
{
    // CS0518: Predefined type 'System.Runtime.InteropServices.InAttribute' is not defined or imported
    public abstract bool Parse(in ReadOnlySpan<char> span);
}

// CS0518: Predefined type 'System.Runtime.InteropServices.InAttribute' is not defined or imported
public delegate bool ParseDelegate(in ReadOnlySpan<char> span);

Это в.NET Core 2 App, в Visual Studio 2017 (15.7.3), и у меня есть <LangVersion>7.2</LangVersion> в моем файле проекта.


Обновить:

Похоже, это связано с пакетом Nuget, который был в проекте. Если я удалю ссылку на пакет Sigil 4.7.0Сборка работает.

Также, если я переустановлю Сигил И установлю System.Runtime.InteropServices 4.3.0 пакет, тогда сборка тоже работает.

Я счастлив, что это может сработать, но что здесь происходит?

0 ответов

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