5

例如,我要看看如果字符串包含一個子,所以我只是做:如何覆蓋從String類的功能在C#

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)); 
} 
+0

如果是「您需要的」,接受答案是一種很好的做法。 :-) – CesarGon 2010-06-29 16:04:20

+0

@CesarGon:我正在等他糾正錯字。謝謝。 =) – Jronny 2010-06-30 04:46:08

+0

瞭解。 :-) – CesarGon 2010-06-30 14:44:41

回答

17

不能覆蓋的功能,但可以彌補這方面的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 
} 

(當然,你可以稱之爲「Contains」,就像標準字符串方法一樣,但是我寧願給它一個更明確的名字,所以很明顯你在檢查什麼......)

+0

非常感謝。這就是我所需要的。 – Jronny 2010-06-29 02:26:33

+0

順便說一句,函數需要靜態的太對了嗎? – Jronny 2010-06-29 02:53:53

+0

@Jronny:是的 - 這是我的文章中的一個錯字。感謝您指出(我現在已經糾正它)。 – 2010-06-29 15:49:49

4

爲什麼不保留東西簡單並使用Any extension method

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

它更簡單,如果我們只是做if(string.Contains(items))...但我可能會在你的代碼中使用函數。謝謝。 – Jronny 2010-06-29 02:25:24