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

Я заметил, что при создании интерфейса, делегата или абстрактного метода с аргументом 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 в Visual Studio 2017 (15.7.3), и у меня есть <LangVersion>7.2</LangVersion>в моем файле проекта.


Обновление:

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

Кроме того, если я переустановлю пакет Sigil AND и установлю System.Runtime.InteropServices 4.3.0, сборка тоже будет работать.

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

...