5

예를 들어, 내가 문자열이 문자열이 포함되어 있는지 확인해야합니다, 그래서 난 그냥 수행C#에서 String 클래스에서 함수를 재정의하는 방법을

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

하지만 난 항목의 배열이있는 경우

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

문자열 클래스에 중 하나의 항목이 문자열에 포함되어 있으면 true를 반환하는 함수를 만들어야했습니다.

이 시나리오에서는 다른 클래스에 함수를 만드는 대신 Contains (string) with Contains (IEnumerable) 함수를 재정의하고 싶습니다. 이 작업을 수행 할 수 있습니까? 그렇다면 기능을 어떻게 재정의 할 수 있습니까? 고맙습니다.

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

"그냥 필요한 것"이라면 대답을 수락하는 것이 좋습니다. :-) – CesarGon

+0

@CesarGon : 오타를 바로 잡기를 기다리고있었습니다. 감사. =) – Jronny

+0

알기. :-) – CesarGon

답변

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 
} 

(허용됨, 표준 문자열 방법과 같이 "포함"이라고 할 수 있지만 더 명확한 이름을 지정하면 확인하는 것이 분명합니다 ...)

+0

고마워. 이것이 내가 방금 필요한 것입니다. – Jronny

+0

아직 기능이 너무 정적 정적해야합니까? – Jronny

+0

@ Jronny : 예 - 내 게시물의 오타였습니다. 그것을 지적 해 주셔서 감사합니다 (지금 수정했습니다). –

4

간단하고 Any extension method을 사용 하시겠습니까?

+0

우리가 if (string.Contains (items)) if를하면 더 간단합니다 ...하지만 함수 내에서 코드를 사용할 수도 있습니다. 감사. – Jronny

관련 문제