C'è un modo per creare metodi di stringa "distruttivi" alla Ruby?
-
05-07-2019 - |
Domanda
In Ruby, i metodi che cambiano l'oggetto hanno un botto alla fine: string.downcase!
In c # devi fare: foo = foo.ToLower ()
Esiste un modo per creare un metodo di estensione come:
foo.ConvertToLower ()
che manipolerebbe foo
?
(Penso che la risposta sia no poiché le stringhe sono immutabili e non puoi fare un ref this
in un metodo di estensione.)
Soluzione
No, non puoi farlo in un metodo di estensione. Per riassegnare il valore di una variabile passata come parametro è necessario passarlo per riferimento usando il modificatore di parametro ref
, cosa non è consentito per i metodi di estensione.
Anche se ciò fosse possibile, potrebbe non esserci una variabile da riassegnare, come in " foo " .ConvertToLower ()
.
Altri suggerimenti
Esistono due modi per mutare un'istanza di stringa:
- Riflessione
- Codice non sicuro
Non consiglierei di usarli. I tuoi colleghi sviluppatori ti odieranno per sempre, in particolare se il metodo viene mai usato per cambiare una stringa che sembra essere letterale ...
Puoi certamente scrivere un metodo di estensione per riassegnare la stringa su cui stai operando. Ad esempio:
public static void ConvertToLower(this string s)
{
s = s.ToLower();
}
Questo non ha nulla a che fare con l'immutabilità delle stringhe.