Aviso do compilador (nível 2) CS0280

'type' não implementa o padrão 'pattern name'. 'method name' tem a assinatura errada.

Duas instruções em C#, foreach e using, dependem de padrões predefinidos, "collection" e "resource", respectivamente. Esse aviso ocorre quando o compilador não consegue corresponder uma dessas instruções ao seu padrão devido à assinatura incorreta de um método. Por exemplo, o padrão "collection" requer que haja um método chamado MoveNext, que não usa parâmetros e retorna boolean. Seu código pode conter um método MoveNext que tem um parâmetro ou talvez retorne um objeto.

O padrão "resource" e using fornecem outro exemplo. O padrão "resource" requer o método Dispose; se você definir uma propriedade com o mesmo nome, receberá esse aviso.

Para resolver esse aviso, verifique se as assinaturas do método em seu tipo correspondem àquelas dos métodos correspondentes no padrão e verifique se você não tem nenhuma propriedade com o mesmo nome que um método exigido pelo padrão.

Exemplo

O exemplo a seguir gera o erro 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
   }
}