Levée d'une Exception dans un if-else bloc

Pour commencer, j'ai réalisé qu'il y a sans doute une meilleure façon de le faire, et plutôt que de lancer une exception, je devrais juste la poignée de la condition meilleure. Cela étant dit, j'ai couru dans un comportement inattendu et de plus je suis curieux de savoir pourquoi ce qui se passe de l'aide à ma demande.

Dans une méthode, je suis tentative d'accès à un fichier fourni par l'utilisateur. Au début de la méthode, je suis de vérifier que le chemin d'accès au fichier n'est pas Null ou String.Empty et lance une exception si il est. Quand j'ai été le tester, j'ai constaté que l'exception est levée, quelle que soit la condition. Est-ce un comportement normal, ou j'ai loupé quelque chose?

public static XElement Foo(String path)
{
    if (String.IsNullOrEmpty(path))
    {
       throw new ArgumentNullException(); //this exception is thrown  
                                          //regardless of the value of 'path'
    }


    //code to open and parse file
    //returns XElement
}

Mise à JOUR:

Dans mes tests scenerio, l'appel de la méthode est simple envoi d'un chemin d'accès par défaut que j'ai codé en dur pour le test. Je n'ai pas terminé l'INTERFACE utilisateur, de sorte que le code à l'utilisateur de définir le chemin d'accès n'est pas complète.

private const string c_fooPath = "C:\\test\\text.txt"

public void CallingFoo()
{
    var xml = Foo(c_fooPath)

    //some code

}

Mise à JOUR #2:

Pour n'en citer que certains de mes autres tests que j'ai essayé. J'ai essayé

if (String.IsNullOrEmpty(path))
{
    Console.WriteLine("testing")       //this line is skipped when my condition is
                                       //false but runs when  i force it to be true

    throw new ArgumentNullException(); //this exception is thrown  
                                       //regardless of the value of 'path'
}

if (false)
{
    throw new ArgumentNullException(); //the exception is not thrown here - the only
                                       //condition i have found so far.
}

public static XElement Foo(String path)
{
    path = "test";

    if (String.IsNullOrEmpty(path))
    {
       throw new ArgumentNullException(); //exception is still thrown  
    }


    //code to open and parse file
    //returns XElement
}
Salut. Veuillez inclure l'appel à cette méthode Foo. Ensuite, il serait plus logique. Aussi, sa Chaîne.Vide et non pas le contraire 🙂 . Merci.
Êtes-vous sûr que vous avez testé une condition où la chaîne a données? Cela semble comme il se doit seulement de jeter sur null ou vide... Regarde droit vers moi. Essayez de définir la chaîne de valeur, juste avant d'instruction si, et de voir si ça en jette toujours.
qu'est-ce que chaîne de caractères.Vide dans quel contexte êtes-vous de mentionner cela ?
Êtes-vous sûr de son lancer une exception quel que soit le chemin? Essayez de remplacer if(String.IsNullOrEmpty(chemin)) si(Faux) pour voir si ça en jette toujours une exception.
grâce corrigé la faute de frappe - c'est ce que je reçois pour poser cette question à 1h du matin. Je ne pense pas que la méthode d'appel est nécessaire, parce que je me demande pourquoi la ligne de lancer jeté quelle que soit la valeur de la chaîne est.

OriginalL'auteur psubsee2003 | 2011-04-29