2009-07-25 10 views
9

Me utilizan para agregar métodos a clases externas como IEnumerable. ¿Pero podemos extender Arrays en C#?¿Es posible extender matrices en C#?

Estoy planeando agregar un método a las matrices que lo conviertan en un IEnumerable incluso si es multidimensional.

no relacionadas con How to extend arrays in C#

+3

¿No es más corto para probar que publicar una pregunta aquí? –

+3

Lo intenté, pero cometí un error en el proceso en ese momento. Ahora estoy obteniendo el comportamiento que esperaba –

Respuesta

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

¿Qué significa "este conjunto de matrices" en el método? Creo que Array es una clase abstracta, ¿qué haces exactamente aquí al escribir "este array Array"? – VatsalSura

+2

esta matriz de matriz significa que * esta matriz * se refiere al tipo que se va a extender. * esta matriz * podría ser * esta T *, donde el método sería * vacío público estático Extender (este T obj) *. El identificador simplemente le da un nombre al tipo, por lo que puede ser referenciado en el método de extensión. – SimonC

2

lo hice!

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

¿Qué significa "este objetivo de matriz" en el método? Creo que Array es una clase abstracta, ¿qué haces exactamente aquí al escribir "este objetivo de matriz"? – VatsalSura

23

Sí. Ya sea mediante la ampliación de la clase Array como ya se ha mostrado, o mediante la extensión de un tipo específico de matriz o incluso una matriz genérica:

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

// or: 

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

El último no es exactamente equivalente a extender Array, ya que no funcionaría para una matriz multidimensional, por lo que es un poco más limitado, lo que podría ser útil, supongo.

+1

+1 Su implementación es más segura que la de @ maciejkow's. Escribí algunos métodos de extensión de matriz usando un método similar hace algún tiempo. –

Cuestiones relacionadas