2014-09-16 6 views
0

Visual Studio lance une IndexOutOfRangeException dans cette fonction:IndexOutOfRangeException mystérieux

public static string ExtractString(string path, string startString, char endChar) 
{ 
    string content = File.ReadAllText(path); 

    /*at this line*/return content.Split(new string[] { startString }, StringSplitOptions.None)[1].Split(endChar)[0].Trim(); 
} 

Toute idée de ce que je fais mal ici?

+0

l'exception est simple. vous accédez à un index qui n'est pas disponible ou n'existe pas ou plus la longueur de votre tableau. –

+0

Au lieu de lever les mains dans la consternation, découvrez où est l'erreur. Briser le code en plusieurs lignes qui font une chose chacune au lieu d'une seule ligne qui fait tout. Il sera alors facile de voir où le problème est basé sur quelle ligne il casse. – jmcilhinney

Répondre

0

C'est une façon étrange de le faire, mais j'ai testé avec une entrée d'échantillon de mon cru et ça marche bien dans les circonstances prévues.

Le problème se produit lorsque startString est introuvable, car le tableau résultant du premier string.Split contiendra un seul élément (la chaîne d'entrée d'origine). Lorsque vous essayez de diviser le 2ème élément sur endChar, il n'y a pas de 2ème élément à trouver, et c'est votre exception.

Je suis sûr qu'il ya des façons plus élégantes de le faire, mais cela fera le travail, le retour null si l'une ou startStringendChar ne peut pas être trouvé:

public static string ExtractString(string content, string startString, char endChar) 
{ 
    int i, j; 

    i = content.IndexOf(startString); 

    if (i == -1) 
     return null; 
    else 
     i += startString.Length; // Start at char after startString 

    j = content.IndexOf(endChar); 

    if (j == -1) 
     return null; 

    return content.Substring(i, j - i); 
} 
+0

Merci, sans votre indice, je n'aurais jamais vérifié le fichier texte à tout moment. Le contenu a été supprimé en quelque sorte. Évidemment l'erreur est partie maintenant, que j'ai réparé le dossier. Et merci pour la fonction réarrangée. – betaFlux