2011-12-01 74 views
12

寻找一种方法来检查,如果一个字符串包含在另一个忽略大/小写,我发现it不能访问我的扩展方法

工作正常。然后,我试着把它放到我的StringExtensions命名空间中。

namespace StringExtensions 
{ 

    public static class StringExtensionsClass 
    { 
     //... 

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

然后:

using StringExtensions;

...

if (".. a".Contains("A", StringComparison.OrdinalIgnoreCase)) 

,但我得到了以下错误:

No overload for method 'Contains' takes '2' arguments

如何解决呢?

回答

5

,我发现我的错误:

dynamic类型这个工程需要使用caststring。 。 ToString()方法是不够的。

if (((string)result.body).Contains(foo, StringComparison.OrdinalIgnoreCase)) 

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

+4

对,因为它是'dynamic',所以不能保证它没有一个名为'ToString'的方法,它返回的不是一个字符串,所以对'dynamic'的任何方法调用的结果总是被视为'dynamic'由编译器 – Davy8

20

当你想用你的扩展,添加此using语句:

using StringExtensions; 

的由于扩展方法声明的方式,视觉工作室本身不会找到他们,并定期Contains方法接受一个论证,因此你的例外。

+0

Yup - 智能感知只会_appear_工作,因为方法名已存在。 –