2009-10-05 13 views
31

quiero hacer esto, pero conseguir este error:¿Utiliza métodos de extensión en .NET 2.0?

Error 1 Cannot define a new extension method because the compiler required type 'System.Runtime.CompilerServices.ExtensionAttribute' cannot be found. Are you missing a reference to System.Core.dll? [snipped some path stuff]

he visto algunas respuestas aquí que dice, usted tiene que definir este atributo a sí mismo.

Cómo lo hago?

EDITAR: Esto es lo que tengo:

[AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] 
public sealed class ExtensionAttribute : Attribute 
{ 
    public static int MeasureDisplayStringWidth (this Graphics graphics, string text) 
    { 

    } 
} 
+1

No; necesitas * dos * clases; uno para el atributo; uno para el (los) método (s) de extensión; actualizará. –

Respuesta

58

así:

// you need this once (only), and it must be in this namespace 
namespace System.Runtime.CompilerServices 
{ 
    [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class 
     | AttributeTargets.Method)] 
    public sealed class ExtensionAttribute : Attribute {} 
} 
// you can have as many of these as you like, in any namespaces 
public static class MyExtensionMethods { 
    public static int MeasureDisplayStringWidth (
      this Graphics graphics, string text) 
    { 
      /* ... */ 
    } 
} 

alternativa; solo agregue una referencia a LINQBridge.

+0

Gracias Marc, en realidad fue su mensaje lo que leí. Lo intenté pero lo compré: Error Los métodos de extensión deben definirse en una clase estática no genérica, donde tengo un método como este: public static int MeasureDisplayStringWidth (estos gráficos gráficos, ...) –

+0

También ExtensionAttribute puede ser cualquier nombre, ¿verdad? ¿Y por qué heredar de Attribute? –

+3

Necesita heredar de Attribute para que sea un atributo ... y necesita llamarse ExtensionAttribute para que el compilador pueda encontrarlo. (Eso es lo que espera que se llame). Su error probablemente sea que no está en una clase estática. –