Использование методов расширения в .NET 2.0? - PullRequest
32 голосов
/ 06 октября 2009

Я хочу сделать это, но получаю эту ошибку:

Ошибка 1 Не удается определить новый метод расширения, поскольку компилятор требуемый тип 'System.Runtime.CompilerServices.ExtensionAttribute' не может быть найден. Вам не хватает ссылки на System.Core.dll? [отрезал некоторые пути пути]

Я видел здесь несколько ответов, в которых говорится, что вы должны определить этот атрибут самостоятельно.

Как мне это сделать?

РЕДАКТИРОВАТЬ : Это то, что у меня есть:

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

    }
}

1 Ответ

59 голосов
/ 06 октября 2009

Вроде так:

// 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 )
    {
           /* ... */
    }
}

В качестве альтернативы; просто добавьте ссылку на LINQBridge .

...