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.)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top