Я пытаюсь написать метод расширения следующим образом:
static class MyExtensions
{
public static int FindSubArray(this Array x, Array y)
{
int offset = 0;
for (int i = 0; i < x.Length; ++i)
{
if (y.SequenceEqual(x.Skip(i).Take(y.Length)))
{
offset = i;
break;
}
}
return offset;
}
}
Однако компилятор сообщает мне, что Array
не имеет .Skip()
метода.Только IEnumerable
делает:
Ошибка CS1061: «Массив» не содержит определения для «Пропустить» и нет доступного метода расширения «Пропустить»
Но когда яизменил типы параметров на IEnumerable<T>
, он говорит, что IEnumerable
не имеет свойства .Length
, только Array
имеет это.
ошибка CS1061: «IEnumerable» не содержитопределение «Длина» и отсутствие доступного метода расширения «Длина»
Когда я написал аналогичный код вне метода расширения, оба типа которого byte[]
, у меня не было проблем с использованием .Skip()
и .Length
, поскольку он легко преобразует byte[]
в IEnumerable<byte>
при необходимости.
Как я могу написать свой метод расширения для использования как .Skip
, так и .Length
?