为什么我的C#扩展方法在这个控制台应用程序中不起作用?

时间:2011-05-11 09:09:23

标签: c# extension-methods

我有控制台应用程序:

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 个答案:

答案 0 :(得分:4)

我猜测“未被拾取”,你的意思是“编译器抱怨它无法找到它”。然后:

扩展方法必须位于“静态”类中,并且必须具有指向该类的命名空间的“using”指令。你呢?

如果它是“编译器没有抱怨但字符串没有改变”那么可能你称之为

 myString.TrimTextAndAppendDots(10);

而不是

 myString = myString.TrimTextAndAppendDots(10);

答案 1 :(得分:2)

扩展方法必须在静态类中声明。

  • 扩展方法的类是静态的吗?

为了调用扩展方法,必须引用声明类的命名空间:

  • 您是否添加了班级装配参考?
  • 您是否为扩展方法类'namespace?
  • 声明了相应的“using”语句

更新:

回答你的评论,无论如何我发现答案是正确的,但现在我们可以补充一下:

  • 你的“程序”类是静态的吗? ;)

答案 2 :(得分:0)

扩展必须是静态类,就像这样:

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,无论您希望使用哪种扩展方法