2010-11-03 2 views
0

Comment puis-je utiliser try/catch/finally pour m'assurer que la fonction retournera une valeur? Je lis des cellules d'une feuille Excel. Parfois, l'opération d'analyse ne fonctionne pas toujours. Je dois retourner 0 si, pour une raison quelconque, l'opération échoue.Comment puis-je utiliser try/catch/finally pour m'assurer que la fonction retournera une valeur?

try 
{ 
    //1. read cell value from excel file 
    //2. get the value, convert it as string, and 
    //3. return it 
} 
catch {} 
finally {} 

Merci pour aider

+0

Avez-vous des tâches de finalisation, par exemple. fermer le fichier, etc. –

+0

Cette méthode ne devrait pas être compilée comme elle l'est maintenant. Le compilateur s'assure que chaque chemin possible renvoie quelque chose. Y a-t-il plus de déclarations de revenus dont vous ne nous avez pas parlé? =) – Jens

+0

Vous avez raison. J'ai omis du code. – Richard77

Répondre

1

Vous n'avez pas besoin finally.

int retValue; 

try 
{  
    // do something 
    retValue = something; 
    return retValue;  
} 
catch (ApplicationException ex) // or just Exception 
{  
    return 0;  
} 
1
String value; 
try 
{ 
    //1. read cell value from excel file 
    //2. get the value, convert it as string 
// no return here! 
} 
catch ...{ 
// exception hadling 
    value = "0"; 
} 
finally {} 
return value; 
+0

Sûrement vous devriez juste mettre la valeur à "0" dans votre gestionnaire d'attraper plutôt que de retourner hors de lui? –

+0

c'est possible aussi, mais j'aime utiliser le nombre minimum de retour dans une méthode. Il augmente la lisibilité et la clarté du code. –

1
public int myFunction() 
{ 
    int ret = 0; 
    try 
    { 
     // obtain ret here from Excel 
    } 
    catch(System.Exception _e) 
    { 
     // an error occured, ensure 'ret' is 0 
     ret = 0; 
    } 
    finally 
    { 
     // any cleanup code you must do, success or failure, e.g. Close excel 
    } 
    return(ret); 
} 
3

Voici comment je le fais, en ayant une valeur de retour comme ceci:

string result = 0; 

    try 
    { 
     //1. read cell value from excel file 
     //2. get the value, convert it as string, and 
     //3. return it 
     result = cellValue; 
    } 
    catch {} 
    finally {} 

    return result; 

Bien que je préfère laisser lever des exceptions donc je sais que quelque chose s'est mal passé car je sais avec certitude que cela n'a pas fonctionné comme ce qui se passe dans votre cas lorsque la valeur de la cellule lue est 0?

Cela peut être une meilleure solution, et est compatible avec .NET:

public bool TryParseCell(Cell cell, out string parsedValue) 
{ 
    try 
    { 
     parsed value = ....; // Code to parse cell 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
+0

Pour être vraiment cohérent avec .Net la signature devrait probablement être public bool TryParseCell (Cellule, out string parsedValue) –

+0

@BurningIce: K, juste pour vous;) Mais si vous voulez être vraiment pédant, ce serait Cell.TryParse, bien que je pense que cela explique le point plus clairement – w69rdy

+0

True, mais vous ne pouvez pas faire des méthodes d'extension sans avoir une instance à un objet: / –

1
try 
{ 
    //1. read cell value from excel file 
    //2. get the value, convert it as string, and 

convertOK=true; 
    //3. return it 


} 
catch {} 
finally {} 

if(!convertOK) return 0; 
1

Les éléments suivants doivent travailler:

int returnVal = 0; 
try 
{ 
// Do something useful which sets returnVal 
} 
catch() 
{ 
// Ex Handling here 
} 
finally 
{ 
// Any clean up here 
} 
return returnVal; 
1
public int returnValue() 
    { 
    int returnValue=0; 
    try 
    { 
     returnValue = yourOperationValue; 
    } 
    catch {} 
    finally 
    { 

    } 
    return returnValue; 

    } 
Questions connexes