2009-07-25 15 views
9

Jestem używany do dodawania metod do zewnętrznych klas takich jak IEnumerable. Ale czy możemy rozszerzyć tablice w C#?Czy możliwe jest rozszerzenie tablic w C#?

Planuję dodać metodę do tablic, która zamienia ją na IEnumerable, nawet jeśli jest wielowymiarowa.

niezwiązanych z How to extend arrays in C#

+3

Czy to nie jest krótsze, niż wypróbowanie tutaj? –

+3

Próbowałem, ale wtedy zrobiłem coś złego. Teraz dostaję oczekiwane zachowanie –

Odpowiedz

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

Co oznacza "ta macierz tablicowa" w metodzie. Myślę, że Array jest klasą abstrakcyjną, więc co dokładnie tutaj robisz, pisząc "tablicę Array"? – VatsalSura

+2

Ta tablica Array oznacza, że ​​* this Array * odnosi się do typu, który ma zostać rozszerzony. * Ta tablica * może równie dobrze być * tym T *, gdzie metoda byłaby * publiczna statyczna pustka Rozszerz (to T obj) *. Identyfikator nadaje typowi tylko nazwę, więc można się do niego odwoływać w rozszerzającej metodzie. – SimonC

2

Zrobiłem to!

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

Co oznacza metoda "ten cel macierzyński" w metodzie. Myślę, że Array jest klasą abstrakcyjną, więc co dokładnie robisz tutaj, pisząc "ten cel Array"? – VatsalSura

23

Tak. Albo poprzez rozszerzenie klasy Array jak już pokazano, lub poprzez rozszerzenie specyficzny rodzaj tablicy lub nawet rodzajowe tablicy:

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

// or: 

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

Ten ostatni nie jest dokładnie równoważne powiększenia Array, ponieważ nie będzie działać dla tablica wielowymiarowa, więc jest trochę bardziej ograniczona, co może być przydatne, jak przypuszczam.

+1

+1 Twoja implementacja jest bardziej bezpieczna dla typu niż @ maciejkow. Napisałem kilka metod rozszerzenia tablicy przy użyciu podobnej metody jakiś czas temu. –

Powiązane problemy