PDA

View Full Version : [c#] problema length


millennio
29-04-2011, 15:44
Questo codice funziona e nell'output mi scrive la lunghezza del numero
int numfiles = 1 + (System.IO.Directory.GetFiles(percorsoDef)).Length;
string snumfiles = numfiles.ToString();
Console.WriteLine(snumfiles.Length);

se invece voglio fare questo:
int numfiles = 1 + (System.IO.Directory.GetFiles(percorsoDef)).Length;
string snumfiles = numfiles.ToString();
//Console.WriteLine(snumfiles.Length);
string zeri;
if (snumfiles.Length = "1")
{
zeri = "000";
}

Ho questi errori:

su snumfiles.Length
Errore 3 Impossibile assegnare un valore alla proprietà o all'indicizzatore 'string.Length' perché è in sola lettura

e

su "1"
Errore 4 Impossibile convertire implicitamente il tipo 'string' in 'int'



Mi

giangian2
29-04-2011, 15:59
Ciao,
l'operatore di uguaglianza è "==", mentre l'operatore di assegnazione è "=".

if (snumfiles.Length = "1")

nel codice da te scritto ci sono due errori:
- assegnazione del campo Length, che è in sola lettura, a "1";
- i doppi apici identificano una stringa, mentre il campo Length è un intero;

il codice dovrebbe essere:

if (snumfiles.Length == 1)

ciaooo

millennio
29-04-2011, 17:19
Grazie,ho provato a modificare come hai detto tu ed ora è così

int numfiles = 1 + (System.IO.Directory.GetFiles(percorsoDef)).Length;
string snumfiles = numfiles.ToString();
//Console.WriteLine(snumfiles.Length);
string zeri;
if (snumfiles.Length == 1)
{
zeri = "000";
}
console.writeline(zeri);

ma mi restituisce l'errore:
utilizzo della variabile locale 'zeri' non assegnata...

Darecon
30-04-2011, 10:49
string zeri="";

:)

Devi assegnarla, altrimenti se non entra nell'if cosa stampa poi? :D

simo33
30-04-2011, 19:09
non capisco perchè utilizzi le stringhe...
la funzione Console.WriteLine() riceve tranquillamente come argomento un intero.
Il codice potresti farlo semplicemente così


int numfiles = 1 + (System.IO.Directory.GetFiles(percorsoDef)).Length;
//Console.WriteLine(numfiles);
if (numfiles == 1)
{
console.writeline("000"); //oppure Console.WriteLine(0);
}

Se metti la funzione writeline(zeri) al di fuori dell' if-statement viene chiamata sia che il numero di file sia pari o no a uno, devi metterla tra le parentesi graffe.
Più variabili metti più memoria occupi è sempre meglio essere concisi e usare solo cose necessarie.

Volendo potresti anche fare così:
int numfiles = (System.IO.Directory.GetFiles(percorsoDef)).Lengt++;
ma questa è solo una "raffinatezza"

millennio
02-05-2011, 07:55
grazie Darecon risolto con string zeri="";