Sto verificando l’immagine caricata in un modulo di registrazione , in cui ho bisogno per utilizzare blocchi try catch. ecco il mio codice:
public bool CheckFileType(string FileName)
{
string Ext = Path.GetExtension(FileName);
switch (Ext.ToLower())
{
case ".gif":
return true;
break;
case ".JPEG":
return true;
break;
case ".jpg":
return true;
break;
case ".png":
return true;
break;
case ".bmp":
return true;
break;
default:
return false;
break;
}
}
si prega di suggerire a me come usare il try catch blocchi qui.
grazie in anticipo.
Perché avete bisogno di “prova di uso di blocchi catch”? Cosa hai provato finora?
Quale parte del codice genererà un’eccezione, a tuo parere?
e perché non si utilizza .JPEG, se si guarda per caso inferiore estensioni?
si dovrebbe accettare la risposta alla tua domanda.
Inoltre non è necessario utilizzare ritorno e pausa, perché il ritorno agisce come una pausa in ogni caso e finisce il metodo.
Quale parte del codice genererà un’eccezione, a tuo parere?
e perché non si utilizza .JPEG, se si guarda per caso inferiore estensioni?
si dovrebbe accettare la risposta alla tua domanda.
Inoltre non è necessario utilizzare ritorno e pausa, perché il ritorno agisce come una pausa in ogni caso e finisce il metodo.
Una migliore può essere come questo,
notato prima punta, comunque grazie per la pronta fuoco amico 😉
il confronto “.JPEG”
Ext.ToLower()
è improbabile partita 😉Come usare il try/catch qui? OK basta metterli nel metodo corpo e basta. Mi piace questa risposta
OriginaleL’autore Furqan Hameedi
Ci sono un sacco di modi che si possono utilizzare le eccezioni in metodi che restituiscono i valori:
Luogo l’istruzione return fuori il try-catch Per esempio:
Messo un ritorno economico all’interno del vostro cattura
Lanciare un’eccezione
Non hanno per restituire un valore, il metodo deve semplicemente fine (ad esempio, raggiungere un ritorno economico o di un’istruzione throw). A seconda eccezione per la sua non è sempre valido per restituire un valore.
Si dovrebbe riflettere attentamente su quando e come intercettare e gestire le eccezioni:
Nel tuo caso:
string Ext = Path.GetExtension(FileName);
, che, secondo la documentazione può fallire seFileName
contiene. (Nota cheGetExtension
non restituisce null, anche seFileName
è null).Così probabilmente sarei gestire le eccezioni, come questa:
Di notare che abbiamo solo intercettare l’eccezione che ci si aspetta (
ArgumentException
), e abbiamo solo posto iltry
dichiarazione circa l’affermazione che, ci aspettiamo che l’eccezione.In effetti è una buona idea per evitare di lancio e la cattura di eccezioni, dove possibile, non solo di subire una pena di prestazioni (che può causare seri problemi se questo metodo viene chiamato all’interno di un ciclo), ma si potrebbe inavvertitamente la cattura e la gestione di un’eccezione che non hai anticipare, di mascherare un problema più serio.
In questo caso si può evitare di buttare l’eccezione interamente mediante il controllo di noi stessi per vedere se
FileName
contiene caratteri non validi:ArgumentException
. Io preferirei solo controllando il nome del file per i caratteri non validi con un se. Oltre a questo, grande risposta. +1.Credo che, in questo particolare caso, se si verifica un errore dovrebbe bolla dello stack, e non essere catturato\trattati in questo metodo.
Eh, stavo solo aggiungere che hai postato 🙂
Purtroppo (solo lettura): “L’array restituito da questo metodo non è garantito che contiene la serie completa di caratteri non validi per i nomi di file e directory.” 🙁
Dipende dall’applicazione, in questo caso direi che il controllo di te stesso o di consentire l’eccezione è fine e cattura / coprente l’eccezione è meno favorevole, tuttavia l’ho mostrato, comunque, dato che in molti casi non si può evitare errori (come IO), e dimostra come pensare eccezioni (che potrebbe gettare? perché dovrebbe buttare? che cosa devo fare?)
OriginaleL’autore Justin
Come non stai provando il tipo di file (solo l’estensione del nome), mi piacerebbe prima di iniziare rinominando il metodo. È possibile effettuare un metodo di estensione per gestire:
Cui poi si possono chiamare, come:
Sì, hai ragione – totalmente rovine della mia risposta, tempo per un aggiornamento 😉
OriginaleL’autore Town
Questo dovrebbe funzionare:
E ricordate: mai intercettare le eccezioni non si sta andando a gestire. (o almeno di ri-lanciare loro)
return false;
è quello che mi manca.Dov’è il try/catch? Sembra di aver risolto il problema sbagliato.
Risolti i problemi di cui sopra.
O, si potrebbe utilizzare LINQ:
return ".gif|.jpg|.jpeg|.png|.bmp".Split('|').Any(e => e.Equals(Ext));
.Penso che questo potrebbe essere più chiaro; return nuovo Elenco<string> { “.gif”, “.jpeg”, “.jpg”, “.png”, “.bmp” }.Contiene(ext);
OriginaleL’autore data