В 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
пакет, тогда сборка тоже работает.
Я счастлив, что это может сработать, но что здесь происходит?