2012-02-04 30 views
6

Estoy intentando sobrecargar un operador en C# (¡no pregunte por qué!) Que se aplica al Lists. Por ejemplo, me gustaría ser capaz de escribir:Sobrecarga del operador C# con la lista <T>

List<string> x = // some list of things 
List<string> y = // some list of things 
List<string> z = x + y 

de manera que la 'z' contiene todos los contenidos de 'x', seguido por el contenido de 'Y'. Soy consciente de que ya hay formas de combinar dos listas, solo trato de entender cómo funciona la sobrecarga de operadores con estructuras genéricas.

(Esta es la clase de ListSystems.Collections.Generic, por cierto.)

+0

'Lista' en su muestra es su propia implementación? O del espacio de nombres 'System.Collections.Generic'? –

+0

Es de System.Collections.Generic. – Joe

Respuesta

7

Por lo que yo sé, esto no es factible: se debe aplicar la sobrecarga del operador en el tipo que lo utiliza. Como List<T> no es su tipo, no puede anular operadores en él.

Sin embargo, puede derivar su propio tipo desde List<string> y anular el operador dentro de su clase.

class StringList : List<string> { 
    public static StringList operator +(StringList lhs, StringList rhs) { 
    } 
} 
+2

No olvide que los operadores se eligen según los tipos de tiempo de compilación. Entonces 'List a = new StringList(), b = new StringList(); var c = a + b' no funcionaría. – svick

+1

@svick Tiene toda la razón, no es posible engañar al compilador para que de algún modo acepte su operador en operandos que * no están * tipados * como su clase donde definió el operador. – dasblinkenlight

+0

Entonces, ¿por qué puedo sobrecargar '*' para trabajar con 'String's, pero no' List 's? – Joe