Почему мой метод расширения C # не работает в этом консольном приложении? - PullRequest
1 голос
/ 11 мая 2011

У меня есть консольное приложение:

namespace LicenceCreator
{
    class Program
    {  
        static void Main(string[] args)
        {
        }    

        public static string TrimTextAndAppendDots(
            this string stringArg, int maxLengthArg)
        {
            string retString;

            if (stringArg.Length > maxLengthArg)
            {
                retString = stringArg.Substring(0, maxLengthArg) + "...";
            }
            else
            {
                retString = stringArg;
            }

            return retString;
        }
    }
}

Но по какой-то причине метод расширения не берется, когда я вызываю его из строки в основном методе, есть идеи, почему?

Ответы [ 3 ]

4 голосов
/ 11 мая 2011

Я предполагаю, что под "не поднят" вы имеете в виду "компилятор жалуется, что не может его найти". Тогда:

Метод расширения должен быть в «статическом» классе, и у вас должна быть директива «using», указывающая на пространство имен этого класса. А ты?

Если это «компилятор не жалуется, но строка не меняется», то, возможно, вы называете это

 myString.TrimTextAndAppendDots(10);

вместо

 myString = myString.TrimTextAndAppendDots(10);
2 голосов
/ 11 мая 2011

Методы расширения должны быть объявлены в статическом классе.

  • Является ли класс метода расширения статическим?

Чтобы вызвать метод расширения, необходимо сослаться на объявление пространства имен класса:

  • Вы добавили ссылку на сборку класса?
  • Вы объявили соответствующий оператор "using" для пространства имен класса методов расширения?

UPDATE:

Отвечая на ваш комментарий, я все равно считаю мой ответ правильным, но теперь мы можем добавить:

  • Ваш класс "Program" статичен? ;)
0 голосов
/ 11 мая 2011

Расширения должны быть в статическом классе, вот так:

public static class StringExtension
{
    public static string TrimTextAndAppendDots(this string stringArg, int maxLengthArg)
    {
        string retString = "";

        if (stringArg.Length > maxLengthArg)
        {
            retString = stringArg.Substring(0, maxLengthArg) + "...";
        }
        else
        {
            retString = stringArg;
        }

        return retString;
    }
}

И, наконец, вы должны объявить StringExtension с оператором using везде, где вы хотите использовать указанные методы расширения

...