2012-02-04 22 views
6

Sto provando a sovraccaricare un operatore in C# (non chiedere perché!) Che si applica a Lists. Ad esempio, vorrei poter scrivere:Operatore C# sovraccarico con Elenco <T>

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

modo che 'z' contiene tutti i contenuti di 'x' seguita dal contenuto di 'y'. Sono consapevole che ci sono già modi per combinare due liste, sto solo cercando di capire come funziona l'overloading dell'operatore con strutture generiche.

(Questa è la classe List da Systems.Collections.Generic, tra l'altro.)

+0

'Elenco' nel campione è la propria implementazione? O dal namespace 'System.Collections.Generic'? –

+0

Proviene da System.Collections.Generic. – Joe

risposta

7

Per quanto ne so, questo non è fattibile: è necessario implementare il sovraccarico di operatore nel tipo che lo utilizza. Dal momento che List<T> non è il tuo tipo, non puoi ignorare gli operatori al suo interno.

Tuttavia, è possibile derivare il proprio tipo da List<string> e ignorare l'operatore all'interno della classe.

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

Non dimenticare che gli operatori sono scelti in base ai tipi in fase di compilazione. Quindi 'Elenco a = new StringList(), b = new StringList(); var c = a + b' non funzionerebbe. – svick

+1

@svick Hai perfettamente ragione, non è possibile ingannare il compilatore in qualche modo accettando il tuo operatore su operandi che non sono * staticamente * digitati come classe in cui hai definito l'operatore. – dasblinkenlight

+0

Quindi perché è possibile sovraccaricare '*' per lavorare con 'String's, ma non' Lista 's? – Joe

Problemi correlati