2009-07-25 15 views
9

IEnumerable과 같은 외부 클래스에 메서드를 추가하는 데 사용됩니다. 하지만 C#으로 배열을 확장 할 수 있습니까?C#에서 배열을 확장 할 수 있습니까?

다차원 임에도 불구하고 IEnumerable로 변환하는 배열에 메서드를 추가 할 계획입니다. 내가 그것을했다

How to extend arrays in C#

+3

여기에 질문을 게시하는 것보다 시도하는 것이 짧지 않습니까? –

+3

나는 시도했다. 그러나 나는 그 당시의 과정에서 잘못된 것을 만들었다. 이제 예상 한 동작을 얻고 있습니다. –

답변

23
static class Extension 
{ 
    public static string Extend(this Array array) 
    { 
     return "Yes, you can"; 
    } 
} 

class Program 
{ 

    static void Main(string[] args) 
    { 
     int[,,,] multiDimArray = new int[10,10,10,10]; 
     Console.WriteLine(multiDimArray.Extend()); 
    } 
} 
+0

메서드에서 "이 배열 배열"은 무엇을 의미합니까? 나는 Array가 추상 클래스라고 생각한다. 그래서이 배열 배열을 쓰면 여기서 정확히 무엇을하고 있는가? – VatsalSura

+2

이 배열 배열은 * this Array *가 확장 할 형식을 나타냅니다. *이 배열은 * this T * 일 수도 있고, 메서드는 * public static void Extend (this T obj) * 일 수 있습니다. 식별자는 단순히 유형에 이름을 부여하기 때문에 확장 메소드에서 참조 할 수 있습니다. – SimonC

2

관련되지!

public static class ArrayExtensions 
{ 
    public static IEnumerable<T> ToEnumerable<T>(this Array target) 
    { 
     foreach (var item in target) 
      yield return (T)item; 
    } 
} 
+0

"this 배열 대상"은 메서드에서 무엇을 의미합니까? 나는 Array가 추상 클래스라고 생각한다. 그래서 "this Array target"을 쓰면 여기서 정확히 무엇을하고 있는가? – VatsalSura

23

예. 어느 이미 같이 Array 클래스를 확장을 통해, 또는 배열의 특정 종류 또는 일반적인 배열을 확장하여 :

public static void Extension(this string[] array) 
{ 
    // Do stuff 
} 

// or: 

public static void Extension<T>(this T[] array) 
{ 
    // Do stuff 
} 

마지막 하나는 그것이 작동하지 것처럼, Array을 확장 정확히 동일하지 않습니다를 다차원 배열이므로 좀 더 제약이있어 유용 할 수 있습니다.

+1

+1 @ maciejkow보다 구현이 더 안전합니다. 나는 전에 비슷한 방법을 사용하여 배열 확장 메서드를 작성했습니다. –

관련 문제