无法访问我的扩展方法

Jac*_*ack 12 .net c# string overloading

寻找一种方法来检查一个字符串是否包含在另一个忽略大写/小写的情况下,我发现:

工作良好.然后,我尝试将它放到我的StringExtensions命名空间.

namespace StringExtensions
{

    public static class StringExtensionsClass
    {
        //... 

        public static bool Contains(this string target, string toCheck, StringComparison comp)
        {
            return target.IndexOf(toCheck, comp) >= 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

using StringExtensions;

...

if (".. a".Contains("A", StringComparison.OrdinalIgnoreCase))
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

方法'Contains'没有重载需要'2'参数

我如何解决它?

Lou*_*ann 22

如果要使用扩展,请使用以下语句添加:

using StringExtensions;
Run Code Online (Sandbox Code Playgroud)

由于Extension方法的声明方式,visual studio本身不会找到它们,而常规Contains方法只接受一个参数,因此你的例外.


Jac*_*ack 6

我发现了我的错误:

对于这种dynamic类型需要使用a cast来工作string..ToString()方法不够.

if (((string)result.body).Contains(foo, StringComparison.OrdinalIgnoreCase))
Run Code Online (Sandbox Code Playgroud)

现在工作正常.再次感谢stackoverflow.:)

  • 是的,因为它是`动态的',所以不能保证它没有一个叫做'ToString`的方法,它返回一个字符串以外的东西,所以对`dynamic`的任何方法调用的结果总是被视为`dynamic`编译器 (4认同)