|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[C# 2.0] inserire stringhe in posizione {0}
Ciao a tutti
Ho una label così composta: Codice:
X:{0}-Y:{0}
evitando di usare un banale string.Insert ? Grazie a tutti RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ma almeno fosse
X:{0}-Y:{1} potresti "sostituire" {0} con quello che vuoi li', e poi {1} con quello che vuoi la'... Con varie soluzioni, dalla piu' elegante e veloce a quella piu' lenta e lunga.
__________________
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: Sep 2004
Messaggi: 3967
|
Quote:
Beh, penso che essendo una label, almeno il testo di base io possa cambiarlo senza far arrabbiare nessuno. La strada più lenta e lunga credo di averla percorsa Specifico un pò più di dettagli: la label è un oggetto di tipo StatusStripLabel che, ovviamente, fa parte di un oggetto StatusStrip. Sul form è presente una griglia, e ho il compito di tracciare le coordinate relative a riga - colonna al passaggio del mouse sulla griglia. Al momento la soluzione che ho implementato è questa: Codice:
int nRow = 0;
int nCol = 0;
private void kGrid_MouseMove(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hti = kGrid.HitTest(e.X, e.Y);
if(hti.RowIndex >= 0)
{
nRow = hti.RowIndex + 1;
nCol = hti.ColumnIndex + 1;
StringBuilder sb = new StringBuilder();
sb.Append("X:");
sb.Append(nRow.ToString());
sb.Append(" - ");
sb.Append("Y:");
sb.Append(nCol.ToString());
coordStatusLabel.Text = sb.ToString();
}
}
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Allora direi:
Codice:
string.Format("X:{0}-Y:{1}", x, y);
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
__________________
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. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ok
Grazie come sempre per il prezioso aiuto !! RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
così è un pò meglio e eviti quelle due variabili orrende che non servono a nessuno
Codice:
private void kGrid_MouseMove(object sender, MouseEventArgs e)
{
if (kGrid.HitTest(e.X, e.Y).RowIndex < 0) return;
coordStatusLabel.Text = string.Format("X:{0} - Y:{1}", kGrid.HitTest(e.X, e.Y).RowIndex + 1,
kGrid.HitTest(e.X, e.Y).ColumnIndex + 1);
}
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Apr 2010
Messaggi: 56
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
vero, lo esegue 3 volte.
preferisco se posso risparmiarmi 2 variabili int ,una HitTestInfo e uno StringBuilder. cmq il concetto era evitare di dichiarare variabili inutili, se proprio ti da fastidio eseguiro 3 volte uno hittest puoi tradurla così Codice:
private void kGrid_MouseMove(object sender, MouseEventArgs e)
{
var temp = kGrid.HitTest(e.X, e.Y);
if (temp.RowIndex < 0) return;
coordStatusLabel.Text = string.Format("X:{0} - Y:{1}", temp.RowIndex + 1,
temp.ColumnIndex + 1);
}
int nRow = 0; int nCol = 0; uno stringBuilder: StringBuilder sb; e hai usato l' hitTest una volta sola. Contento? |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 56
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
se mi dici cosa non ti è chiaro te lo posso spiegare
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 56
|
Non mi è chiaro secondo quale criterio la variabile sarebbe inutile, visto che uno degli usi principali delle variabili è proprio quello di salvare un valore da usare più volte.
nRow, nCol e sb sono senza dubbio inutili (in questo caso). Ma hti proprio no. |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
Quote:
Dipende poi dal metodo in gioco, spesso è più conveniente chiamare più volte um metodo anzichè dichiarare una variabile. Dipende. Le altre inoltre sono assolutamente inutili, se uno non lo vede a colpo d'occhio vuol dire che non ha molta esperienza. Dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura. |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Secondo me bisogna trovare un giusto compromesso con la leggibilità. Togliendo tutte le variabili inutili si rischia di non far capire niente a chiunque altro legga il codice.
|
|
|
|
|
|
#15 | ||
|
Member
Iscritto dal: Apr 2010
Messaggi: 56
|
Quote:
Quote:
Molto peggio chiamare un metodo come HitTest per ben 3 volte soltanto per avere 1 riga di codice in meno. MOLTO peggio. |
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
Ripeto che dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura.
Per quanto riguarda il mio codice ho tolto anche io le 3 chiamate al metodo. Ed ho comunque risparmiato la dichiarazione di 3 variabili inutili. Inoltre ti posso assicurare che se tu avessi a che fare con liste di dati di una certa dimensione (parlo di liste Entity oltre le 100000 ad esempio) molto spesso, a discapito di un pò di tempo cpu perso, è molto meglio chiamare metodi tipo un orderby o un sort più volte pur di risparmiare l'orrore di copiare ogni volta un oggetto di quel tipo in un ulteriore variabile enorme. Inoltre non dimentichiamoci che il metodo dal quale siamo partiri risponde alla chiamata di un evento di mouse move, questo vuol dire che viene chiamato una gran quantità di volte, e ogni volta si dovrebbe istanziare tutte quelle variabili inutili? per carità. è vero che finiscono in garbage collection, ma è anche vero che la garbage del .net le pulisce ad ogni ciclo di garbage e non subito, quindi è un dispendio enorme di risorse per aggiornare una label. follia. Non vedere che quelle 3 variabili in realtà ne generano a runtime quintali è un altro classico esempio di inesperienza. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
Per questo è sempre buona norma commentare il codice, non c'è miglior modo per documentare quello che si scrive. Oltre ovviamente a cercare di rendere il codice leggibile, fidati che su progetti di una certa dimensione meno dichiarazioni si hanno e più si capisce. Altrimenti poi ti trovi ogni due secondi a cercare le variabili in giro per il sorgente. Cose del tipo "e questa variabile cos'è??? dove l'ha dichiarata??? aspetta che la cerco... a si eccola ok è un int, ma aspetta, sono sicuro che non la tocchi mai prima di arrivare dove stavo leggendo???? fammi scorrere bene il codice.... ok torno di là..... oh no e quest'altra???" ecc ecc ecc
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
Quote:
|
|
|
|
|
|
|
#19 | |||||
|
Member
Iscritto dal: Apr 2010
Messaggi: 56
|
Quote:
Quote:
Quote:
Quote:
Quote:
|
|||||
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
vabbhe dai chiudiamo la questione mi pare tu la voglia spostare in polemica e non mi interessa.
Cmq il mio era solo un esempio che mi avevi chiesto. Ad ogni modo hai ragione su tutto basta che non ti scaldi per niente. amici come prima ciao |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:20.




















