【问题标题】:How to override functions from String class in C#如何在 C# 中覆盖 String 类中的函数
【发布时间】:2010-06-29 01:52:18
【问题描述】:

例如,我需要查看一个字符串是否包含子字符串,所以我就这样做了:

String helloworld = "Hello World";
if(helloworld.Contains("ello"){
    //do something
}

但如果我有一个项目数组

String helloworld = "Hello World";
String items = { "He", "el", "lo" };

我需要在 String 类中创建一个函数,如果其中任何一个都返回 true 例如,数组中的项目包含在字符串中。

对于这种情况,我想用 Contains(IEnumerable) 覆盖函数 Contains(string),而不是在另一个类中创建函数。是否可以这样做,如果可以,我们如何覆盖该功能?非常感谢。

所以这里有完整的解决方案(谢谢大家):

public static bool ContainsAny(this string thisString, params string[] str) {
    return str.Any(a => thisString.Contains(a));
}

【问题讨论】:

  • 如果答案是“您所需要的”,最好接受答案。 :-)
  • @CesarGon:我在等他纠正错字。谢谢。 =)

标签: string c#-4.0 extension-methods sealed overloading


【解决方案1】:

您不能覆盖该函数,但您可以为此创建一个extension method

public static class StringExtensions {
     public static bool ContainsAny(this string theString, IEnumerable<string> items)
     {
         // Add your logic
     }
}

然后你可以像对字符串的普通方法一样调用它,只要你引用程序集并包含命名空间:

String helloworld = "Hello World";
String[] items = new string[] { "He", "el", "lo" };

if (helloworld.ContainsAny(items)) { 
   // Do something
}

(当然,您可以将其称为“包含”,就像标准的字符串方法一样,但我更愿意给它一个更明确的名称,以便您检查的内容很明显......)

【讨论】:

  • 非常感谢。这正是我所需要的。
  • @Jronny:是的 - 这是我帖子中的错字。感谢您指出(我现在已经更正了)。
【解决方案2】:

为什么不让事情变得简单并使用Any extension method

string helloworld = "Hello World";
string[] items = { "He", "el", "lo" };
if (items.Any(item => helloworld.Contains(item)))
{
    // do something
}

【讨论】:

  • 如果我们只做 if(string.Contains(items)) 会更简单...但我可能会在函数中使用您的代码。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2017-12-26
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多