|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Aug 2005
Messaggi: 226
|
[.NET - C#]Problema con la gestione delle stringhe
Salve, ho un gravissimo problema con la gestione delle stringhe, il fatto è che in .NET due oggetti di tipo stringa diversi, ma con lo stesso valore, puntano allo stessa stringa. Cioè se ho:
String pippo = "ciao"; String paperino = "ciao"; pippo e paperino referenziano lo stesso oggetto, per cui prendendo un lock su paperino è come se lo si prendesse anche su pippo. Per quel che devo fare questa è una cosa gravissima e l'unica soluzione e fare in modo di avere 2 diverse stringhe diversi, che refernziano oggetti diversi, ma che hanno lo stesso valore. C'è un modo per fare ciò? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
La soluzione potrebbe trovarsi prima capendo perche' hai bisogno di fare il lock su un stringa.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Ad esempio dichiarando le stringhe in modo da forzare C# a crearne una nuova istanza : Modo 1 ( il tuo ) : Codice:
string pippo = "ciao";
string paperino = "ciao";
// Controllo :
if (ReferenceEquals(pippo, paperino) == true)
{
MessageBox.Show("STESSO REF");
}
else
{
MessageBox.Show("REF DIVERSI");
}
Modo 2 : Codice:
string pippo = new StringBuilder().Append("ciao").ToString();
string paperino = new StringBuilder().Append("ciao").ToString();
// Controllo :
if (ReferenceEquals(pippo, paperino) == true)
{
MessageBox.Show("STESSO REF");
}
else
{
MessageBox.Show("REF DIVERSI");
}
Modo 3 : Codice:
string pippo = "ciao";
string paperino = String.Copy(pippo);
// Controllo :
if (ReferenceEquals(pippo, paperino) == true)
{
MessageBox.Show("STESSO REF");
}
else
{
MessageBox.Show("REF DIVERSI");
}
Vedi se può esserti utile... |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Giusto.
Ma se non c'e' di mezzo il Marshaling verso C++ o simili non riesco a vedere la necessita' di giocare in questo modo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
Poi le stringhe sono immutabili, quindi fare un lock su una stringa non ha molto senso.
__________________
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:55.



















