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