Поделиться через


Предупреждение компилятора (уровень 2) CS0280

Обновлен: Ноябрь 2007

Сообщение об ошибке

"тип" не реализует шаблон "имя шаблона". "имя метода" имеет неправильную подпись.
'type' does not implement the 'pattern name' pattern. 'method name' has the wrong signature.

Два оператора C# — foreach и using — основаны на предварительно определенных шаблонах — "collection" и "resource" соответственно. Это предупреждение возникает, если компилятору не удается сопоставить один из этих операторов с его шаблоном из-за неверной подписи метода. Например, для шаблона "collection" требуется наличие метода MoveNext, который не принимает параметров и возвращает значение boolean. В коде может содержаться метод MoveNext, который принимает один параметр или, например, возвращает объект.

В качестве другого примера можно привести шаблон "resource" и оператор using. Для шаблона "resource" требуется метод Dispose; если определить свойство с тем же именем, возникнет это предупреждение.

Чтобы устранить это предупреждение, убедитесь, что подписи методов в типе совпадают с подписями соответствующих методов в шаблоне. Также проверьте, что отсутствуют свойства с тем же именем, что и у метода, который требуется для шаблона.

Пример

Следующий пример приводит к возникновению ошибки CS0280.

// CS0280.cs
using System;
using System.Collections;

public class ValidBase: IEnumerable
{
   IEnumerator IEnumerable.GetEnumerator()
   {
      yield return 0;
   }

   internal IEnumerator GetEnumerator()
   {
      yield return 0;
   }
}

class Derived : ValidBase
{
   // field, not method
   new public int GetEnumerator;
}

public class Test
{
   public static void Main()
   {
      foreach (int i in new Derived()) {}   // CS0280
   }
}