Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-06-2010, 14:56   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
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}
Durante l'esecuzione del programma, come posso inserire i valori di X e Y
evitando di usare un banale string.Insert ?

Grazie a tutti

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 17:09   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 17:35   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
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.
Ciao

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 perciò mi è stato chiesto di non utilizzare un metodo string.Insert()

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
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 17:45   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Allora direi:
Codice:
string.Format("X:{0}-Y:{1}", x, y);
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 18:00   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Allora direi:
Codice:
string.Format("X:{0}-Y:{1}", x, y);
__________________
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 18:13   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
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
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2010, 19:58   #7
sneeze
Senior Member
 
L'Avatar di sneeze
 
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);
        }
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2010, 20:10   #8
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
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);
        }
Peccato che il resto del tuo codice sia peggiore... esegue il metodo HitTest 3 volte invece di 1.
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2010, 20:57   #9
sneeze
Senior Member
 
L'Avatar di sneeze
 
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);
        }
e hai comunque risparmiato 2 int inutili :

int nRow = 0;
int nCol = 0;

uno stringBuilder:

StringBuilder sb;

e hai usato l' hitTest una volta sola.
Contento?
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 01:28   #10
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
cmq il concetto era evitare di dichiarare variabili inutili, se proprio ti da fastidio eseguiro 3 volte uno hittest puoi tradurla così
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 09:27   #11
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
se mi dici cosa non ti è chiaro te lo posso spiegare
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 13:17   #12
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
se mi dici cosa non ti è chiaro te lo posso spiegare
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.
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 15:57   #13
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da lock cmpxchg8b %ebx Guarda i messaggi
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.
Difatti hti è l'unica che ho riutilizzato anche io, anche se la mia si chiama temp.
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.
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 16:25   #14
ndakota
Senior Member
 
L'Avatar di ndakota
 
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.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 16:44   #15
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Difatti hti è l'unica che ho riutilizzato anche io, anche se la mia si chiama temp.
Parlavo del tuo primo spezzone di codice.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Dipende poi dal metodo in gioco, spesso è più conveniente chiamare più volte um metodo anzichè dichiarare una variabile. Dipende.
Sicuramente non in questo caso. Fammi un esempio.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura.
Molto peggio chiamare un metodo come HitTest per ben 3 volte soltanto per avere 1 riga di codice in meno. MOLTO peggio.
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:27   #16
sneeze
Senior Member
 
L'Avatar di sneeze
 
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.
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:32   #17
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da ndakota Guarda i messaggi
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.
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
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:36   #18
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da sneeze Guarda i messaggi
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.
Scusa riguardando l'originale ho visto che i due int sono dichiarati fuori dal metodo. magnifico..... questa sì che è rpogrammazione.... a quando le variabili static e i global per aggiornare una label??? eheheheheheh
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:42   #19
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Per quanto riguarda il mio codice ho tolto anche io le 3 chiamate al metodo.
Si, dopo che te l'ho fatto notare io.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
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.
Non so perché tu stia spostando la discussione sulle liste ed i metodi di IEnumerable (o meglio, lo so, ma preferisco evitare), ma vorrei ricordarti che stavamo parlando di HitTest.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
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à.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
è 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.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Non vedere che quelle 3 variabili in realtà ne generano a runtime quintali è un altro classico esempio di inesperienza.
Hai qualche serio problema di comprensione?
Quote:
Originariamente inviato da lock cmpxchg8b %ebx Guarda i messaggi
nRow, nCol e sb sono senza dubbio inutili
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 18:26   #20
sneeze
Senior Member
 
L'Avatar di sneeze
 
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
sneeze è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Obbligati ad acquistare una scheda madre...
GTA VI su PC? La data non c'è, ma...
Monopattini elettrici, a un anno dal dec...
Tesla Robotaxi, autista di sicurezza si ...
Samsung Galaxy S26: svelate le combinazi...
Microsoft Ignite: arriva Edge for Busine...
OPPO e Lamine Yamal uniscono sport e tec...
Microsoft, NVIDIA e Anthropic siglano un...
SpaceX potrebbe comunicare alla NASA rit...
Scoperte cavità sotterranee scava...
OnePlus anticipa l'arrivo di due nuovi p...
DJI lancia Osmo Action 6: la prima actio...
NASA: conferenza stampa sulla cometa int...
Ex CEO di TSMC passa a Intel: aperta un'...
Gigabyte X870E Aorus Elite X3D, una moth...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v