2017-09-08 1 views
-5

파일 이름 배열이 있습니다. 배열에 파일이 없으면 예외를 throw해야합니다. catch를 사용해도됩니다. 도움을 받으십시오. 미리 감사드립니다.try를 사용하여 C# 조건 확인 try catch를 사용하여

string[] fileEntries = Directory.GetFiles(filepath, "*.csv");. 
// throw an exception if no files 
    if (fileEntries.Length == 0){} 
+4

예외를 포착하는 것은 예외를 포착하는 것과 반대입니다. 'C# 예외 예외'를 검색하면 많은 예제를 찾을 수 있습니다. – Rob

+0

참고 사항 : [예외 및 예외 처리] (https://docs.microsoft.com/dotnet/csharp/programming-guide/exceptions/) – Corak

답변

4

은 내가

은 try/catch 블록은 예외를 잡기위한 시도 캐치를 사용하고 해당 정보로 뭔가를 할 exception.Can를 던질 필요가있다. 당신이 예외를 발생해야하는 경우, 단순히 그것을

if (fileEntries.Length == 0) 
{ 
    throw new Exception("No *.csv files available"); 
} 

이 예외가 지금이 코드 조각이 위치하고 방법이라는 방법을 위쪽으로 발생합니다 던져. try/catch 블록을 사용하여이 예외를 catch하고 정보를 사용할 수준을 결정할 수 있습니다. method1 위쪽으로 여행 및 실행에서 프로그램을 중지/대폭를 중단됩니다이 예외를 잡은하지 않을 경우

void method1(){ method2(); } 

void method2(){ method3(); } 

void method3() 
{ 
    string[] fileEntries = Directory.GetFiles(filepath, "*.csv");. 

    if (fileEntries.Length == 0) 
    { 
     throw new Exception("No *.csv files available"); 
    } 
} 

. 이 수준에서 그것을 잡을하고 (예를 들어 당신이 콘솔 응용 프로그램이있는 경우) 사용자에게 정보를 제공 할 수 있습니다 더

을 확인하기위한 데이터를 추가

void method1() 
{ 
    try 
    { 
     method2(); 
    } 
    catch(Exception ex) 
    { 
      Console.WriteLine(ex.Message); 
    } 
} 

내가 제외 obj를 전직을 통과 할 수 있습니다

은 당신이 정보의 소스, 또는 내부 예외로 additional exceptionstring을 통과 할 수 있도록 기본 Exception의 생성자를 살펴 보자.

편집 :

당신이 Corak에 의해 제안으로 자신의 custom exception을 작성하는 경우. 당신은 당신의 자신의 생성자를 정의하고 오류 코드에 대한 예를 enum에 대한 전달할 수 : method3에서 지금

public enum ErrorCodes 
{ 
    E1, 
    E2, 
    S4, 
    P5 
} 
public class MyObjectTransferException : Exception 
{ 
    public object ErrorCode { get; set; } 

    public MyObjectTransferException(string message, ErrorCodes code) : base(message) 
    { 
     this.ErrorCode = code; 
    } 
} 

당신이 예외의이 형태를 슬로우 :

void method3() 
{ 
    string[] fileEntries = Directory.GetFiles(filepath, "*.csv");. 

    if (fileEntries.Length == 0) 
    { 
     throw new MyObjectTransferException("No *.csv files available", ErrorCodes.E1); 
    } 
} 

method1 당신은해야합니다

void method1() 
{ 
    try 
    { 
     method2(); 
    } 
    catch(MyObjectTransferException ex) 
    { 
      Console.WriteLine(ex.Message); 
      Console.WriteLine(ex.ErrorCode); 
    } 
} 
+0

안녕하세요. 답변을 주셔서 감사합니다. 예외를 제외하고 전 obj를 전달할 수 있습니다. 추가 확인을위한 데이터? –

+0

@John_Snow 조금 더 자세히 설명해 주시겠습니까? 당신이하려는 일이 확실하지 않습니다. – Fildor

+0

나는 예외를 각 유형에 오류 코드를 추가하고 싶습니다. 그렇다면 메일 서버가 ex.data.add ("Error", E1)를 사용하여 ex 객체의 값을 전달하려는 경우 –

0

그냥 하나의 예 : 예외의이 형태를 잡아

if (fileEntries.Length == 0) 
{ 
    throw new ArgumentException("FileNames array must not be empty!"); 
} 

어떤 종류의 예외를 던지기로 결정해야합니다. fileEntries이 메서드에 매개 변수 ...

그러나가 있다면 ArgumentException이 괜찮을 것 : 나는 이 이런 식으로을 수행하지 않는 것이 좋습니다 싶습니다. 예를 들어 성공/실패 또는 오류 코드를 나타내는 bool을 반환 할 수 있습니다. 클라이언트 측에서 try/catch보다 비용이 적게 듭니다. 제어 흐름에 대한 예외를 사용하는 것은 일반적으로 싫은 일입니다.

자세한 내용은 https://softwareengineering.stackexchange.com/a/189225을 참조하십시오.

관련 문제