如何在整个解决方案中声明具有全局范围的扩展

时间:2014-05-11 05:19:55

标签: c# global-scope turkey-test

我试图写一个扩展名(实际上取自Case insensitive 'Contains(string)'

在进行字符串比较时,它会补偿土耳其测试。扩展本身很简单:

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

现在关键是我试图找出在何处/如何包含这个,以便在整个解决方案(包含多个项目,每个项目都有自己的命名空间和类)中,它可以可以通过string.Contains轻松访问,而无需使用class.string.Contains或其他方式。

假设有一个项目' Util'它包含在所有其他项目中,有些我可以将它放在Util中(没有类?),以便它可以作为string.Contains在整个解决方案中全局引用?

这甚至可能吗?如果是这样的话?

2 个答案:

答案 0 :(得分:5)

虽然我不推荐它,但您可以通过将代码包含在命名空间System下的公共静态类中轻松实现您的目标。

namespace System
{
   public static class CaseInsensitiveContains
   {
       public static bool Contains(this string source, string toCheck, StringComparison comp)
       {
           return source.IndexOf(toCheck, comp) >= 0;
       }
   }
}

如果没有静态类,您的扩展方法将无法正常工作。

将上述内容放在.cs文件中之后,您无法在任何地方使用String.Contains,因为几乎所有代码都使用System命名空间,这意味着它有点全局;)

答案 1 :(得分:1)

不,你不能做那样的事情。你可以做什么,你可以创建一个实用类库,并在你想要调用的其他项目中添加它的引用或使用如下函数:

namespace Utility
{
    public class StringUtil
    {
        public static bool Contains(string source, string toCheck, StringComparison comp)
        {
          return source.IndexOf(toCheck, comp) >= 0;
        }
    }
}


using Utility.StringUtil;

//call function
Contains(....);

using Utility;

//call function

StringUtil.Contains(....);