2009-07-25 8 views
9

Je suis habitué à ajouter des méthodes à des classes externes comme IEnumerable. Mais pouvons-nous étendre les tableaux en C#?Est-il possible d'étendre les tableaux en C#?

Je prévois d'ajouter une méthode aux tableaux qui le convertissent en IEnumerable même s'il est multidimensionnel.

Non lié à How to extend arrays in C#

+3

Est-ce que ce n'est pas plus court que de poster une question ici? –

+3

J'ai essayé, mais j'ai fait quelque chose de mal dans le processus à l'époque. Maintenant, je reçois le comportement attendu –

Répondre

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

Que signifie "ce tableau Array" dans la méthode. Je pense que Array est une classe abstraite alors que faites-vous exactement ici en écrivant "ce tableau Array"? – VatsalSura

+2

ce tableau Array signifie que * ce tableau * fait référence au type à étendre. * ce tableau * pourrait tout aussi bien être * ce T *, où la méthode serait * public static void Extend (this T obj) *. L'identificateur donne simplement un nom au type, de sorte qu'il peut être référencé dans la méthode d'extension. – SimonC

2

Je l'ai fait!

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

Que signifie "cette cible de tableau" dans la méthode. Je pense que Array est une classe abstraite alors que faites-vous exactement ici en écrivant "cette cible Array"? – VatsalSura

23

Oui. Que ce soit par l'extension de la classe Array comme cela a déjà montré, ou en étendant un type spécifique de tableau ou même un tableau générique:

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

// or: 

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

Le dernier est pas exactement équivalent à l'extension Array, car il ne fonctionnerait pas pour un tableau multidimensionnel, donc c'est un peu plus contraignant, ce qui pourrait être utile, je suppose.

+1

+1 Votre implémentation est plus sécurisée que celle de @ maciejkow. J'ai écrit quelques méthodes d'extension de tableau en utilisant une méthode similaire il y a quelque temps. –