[C#] Try-Catch 문이 종료됩니다. C #의 XML 파일을 통해 루프를 읽는 동안


Answers

예외가 throw 된 후 reader 가 잘못된 상태로 reader.Read(); 는 예외가 발생한 reader.Read() 가능성이 가장 높습니다. while 아무것도 돌려 보내지 않고 끝납니다.

콘솔 앱에서 간단한 switch 를 수행하여 예외를 포착하고 포함 루프가 계속 진행됩니다.

var s = "abcdefg";
foreach (var character in s)
{
    switch (character)
    {
        case 'c':
            try
            {
                throw new Exception("c sucks");
            }
            catch
            {
                // Swallow the exception and move on?
            }
            break;
        default:
            Console.WriteLine(character);
            break;
    }
}

코드를 reader.Read() 예외가 잡힌 후에 reader.Read() 를 실행하려고합니까?

Question

나는 XML 파일을 통과하는 while 루프를 가지고 있으며, "url"노드 중 하나에 대해 때때로 그 안에 유효하지 않은 값이 있습니다. 나는 이것에 try-catch 문을 써서 잘못된 값을 잡는다. 문제는 잘못된 값을 가져올 때마다 while 루프가 종료되고 프로그램이 해당 루프 외부에서 계속 진행된다는 것입니다. 유효하지 않은 값이 발견되면 나머지 XML 파일을 계속 읽으려면 while 루프가 필요합니다.

여기 내 코드가 있습니다 :

        XmlTextReader reader = new XmlTextReader(fileName);
        int tempInt;

        while (reader.Read())
        {
            switch (reader.Name)
            {
                case "url":
                    try
                    {
                        reader.Read();
                        if (!reader.Value.Equals("\r\n"))
                        {
                            urlList.Add(reader.Value);
                        }
                    }
                    catch
                    {                            
                        invalidUrls.Add(urlList.Count);   
                    }
                    break;
            }
        }

관련성이 없으므로 나머지 switch 문을 포함하지 않기로했습니다. 다음은 XML 예제입니다.

<?xml version="1.0"  encoding="ISO-8859-1" ?>
<visited_links_list>
    <item>
        <url>http://www.grcc.edu/error.cfm</url>
        <title>Grand Rapids Community College</title>
        <hits>20</hits>
        <modified_date>10/16/2012 12:22:37 PM</modified_date>
        <expiration_date>11/11/2012 12:22:38 PM</expiration_date>
        <user_name>testuser</user_name>
        <subfolder></subfolder>
        <low_folder>No</low_folder>
        <file_position>834816</file_position>
     </item>
</visited_links_list>

코드 전체에서 발생하는 예외는 다음과 유사합니다.

" ''16 진수 값 0x05는 유효하지 않은 문자입니다. 줄 3887, 위치 13"




계속 사용

while (reader.Read())
        {
            switch (reader.Name)
            {
                case "url":
                    try
                    {
                        reader.Read();
                        if (!reader.Value.Equals("\r\n"))
                        {
                            urlList.Add(reader.Value);
                        }
                    }
                    catch
                    {
                        invalidUrls.Add(urlList.Count);
                        continue;
                    }
                    break;
            }
        }