为什么这种扩展方法不起作用?

时间:2011-03-23 21:38:55

标签: c# .net extension-methods

public static string ToTrimmedString(this DataRow row, string columnName)
{
    return row[columnName].ToString().Trim();
}

编译正常,但它不会出现在DataRow的intellisense中......

5 个答案:

答案 0 :(得分:21)

我的猜测是你没有包含命名空间。

答案 1 :(得分:9)

确保此方法位于自己的static class,与消费的DataRow分开的类。

namespace MyProject.Extensions
{
   public static class DataRowExtensions
   {
      //your extension methods
   }
}

在您的消费者中,确保您:

using MyProject.Extensions

答案 2 :(得分:1)

我有同样的问题。我的错误并不是我错过了静态类或静态方法,而是我的扩展所在的类不公开。

答案 3 :(得分:0)

除了缺少使用外,可能还会出现以下症状相同的情况: 如果您在类本身的方法内(或者在类的实现者/继承者中),则需要使用this

文件扩展名.cs:

namespace a 
{
    public static void AExt(this A a) {}
}

文件user.cs

namespace a 
{

    class A {}

    class B : A 
    {
        this.AExt();
        // AExt() will not work without this.
    }
}

答案 4 :(得分:0)

如果您使用其他名称空间,请尝试以下代码。

namespace Extensions
{
    public static class StringExtensions
    {
        public static bool IsNumeric(this string inputString)
        {
            return decimal.TryParse(inputString, out decimal result);
        }
    }
}

namespace Business
{

    // add here other namespaces
    using Extensions;
    public static class Tools
    {
        public static bool Check(string inputString)
        {
            return inputString.IsNumeric();
        }
    }
}