나는 어떤 타입이나 예외를 포착 해보고 싶다.이 코드는 충분하다 (자바에서 할 수있는 방법이다)?C#에서 try 및 catch를 사용하여 모든 예외를 catch하는 방법은 무엇입니까?
try {
code....
}
catch (Exception ex){}
아니면
try {
code....
}
catch {}
해야 하는가?
나는 어떤 타입이나 예외를 포착 해보고 싶다.이 코드는 충분하다 (자바에서 할 수있는 방법이다)?C#에서 try 및 catch를 사용하여 모든 예외를 catch하는 방법은 무엇입니까?
try {
code....
}
catch (Exception ex){}
아니면
try {
code....
}
catch {}
해야 하는가?
두 가지 방법 모두 모든 예외를 포착합니다. ex
이 선언되었지만 사용되지 않았기 때문에 컴파일러 경고를 생성한다는 점을 제외하고 두 코드 예제 간에는 큰 차이점이 없습니다.
그러나 일부 예외는 특별하며 자동으로 다시 적용됩니다.
ThreadAbortException
은 잡힐 수있는 특별한 예외이지만 catch 블록의 끝에서 자동으로 다시 발생합니다. 코멘트에서 언급 한 바와 같이
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
, 일반적으로 잡아 모든 예외를 무시하는 매우 나쁜 생각입니다. 일반적으로 다음 중 하나를 수행하려고합니다.
치명적이지는 않은 예외를 찾아서 무시하십시오.
catch (SomeSpecificException)
{
// Ignore this exception.
}
모든 예외를 캐치하고 기록하십시오.
catch (Exception e)
{
// Something unexpected went wrong.
Log(e);
// Maybe it is also necessary to terminate/restart the application.
}
캐치 모든 예외는, 몇 가지 정리를 할 다음 예외를 다시 던진다. 마지막 경우에 예외 throw;
하지 throw ex;
를 사용하여 슬로우 다시 것을
catch
{
SomeCleanUp();
throw;
}
참고.
불행히도 릴리스 모드에서는 모든 예외가 catch되지 않습니다./ – Muflix
Muflix는 catch {}가 모든 예외를 catch하지 않는 이유를 자세히 설명 할 수 있습니다. 릴리스 모드 [?]? –
두 가지 모두 괜찮지 만 첫 번째 것만 예외를 검사 할 수 있습니다.
두 가지 모두 예외를 삼켜 버리고 의미있는 일을하기 위해 예외를 잡아야합니다. 문제 숨기기는 이 아니라입니다. 당신은 당신이
try {
code....
}
catch (Exception ex){}
및 catch 블록에서 사용 전보다를 사용하는 것보다 catch 블록에서 예외 객체 뭔가를해야 할 경우
두 가지 방법이 정확합니다.
어쨌든 Exception 클래스를 cathc하는 것이 항상 좋은 것은 아니지만 더 구체적인 예외를 예상하는 것이 더 나은 방법입니다. 예외는 예상 할 수 있습니다.
모든 예외는 Exception
에서 파생되므로 위의 두 가지 모두 작동합니다.
왜 이렇게하고 싶은지 물어볼 것입니다. 복구 할 수있는 예외 만 잡아야합니다. 다른 모든 것은 응용 프로그램을 끔찍한 죽음으로 몰아 넣어야합니다. 응용 프로그램이 손상된 상태로 계속 진행하는 것보다 응용 프로그램이 충돌하는 것이 좋습니다.
예외를 처리하고 싶지 않습니다. 난 그냥 내 프로그램이 발생하지 않으면 추락하지 않기를 바란다. –
그래서 뭔가 잘못되었다고 사용자에게 알리지 않을 것이다. ... –
실제로 여러 가지 가능한 유스 케이스가있다. 이. 웹 서비스에서 여러 개의 (50,000 개 이상) 리소스를 일괄 적으로 가져올 때 (예 : 잘못된 HTTP 오류, 서비스 시간 초과, 500 개의 내부 서버 오류를 반환하는 서비스를 포함하되 이에 국한되지 않는 모든 가능한 오류를 포착하고 싶습니다.), 로그하고 계속하십시오. 여기서 중요한 것은 개별 웹 호출에 대해이 작업이 실패 할 수있는 모든 방법을 아직 알지 못한다는 것입니다. –
다른 모든 의견 외에도 약간의 차이가 있음을 유의하십시오. 완전한 차이는 여기에 설명되어 있습니다.
빈 catch 절을 사용하면 어셈블리에 "RuntimeCompatibility (WrapNonExceptionThrows = false)"(CLR2 이후 기본적으로 true)로 표시되어있을 때 CLSCompliant 예외를 catch 할 수 있습니다. [1] [2] [3]
[1] http://msdn.microsoft.com/en-us/library/bb264489.aspx
[2] http://blogs.msdn.com/b/pedram/archive/2007/01/07/non-cls-exceptions.aspx
[3] Will CLR handle both CLS-Complaint and non-CLS complaint exceptions?
I 오류 때문에, 모든 예외를 catch하고 데이터베이스에 저장 쉽게 수정 될 수있다 - 페이지, 장소, 날짜 등이
저장try
{
Cart = DB.BuyOnlineCartMasters.Where(c => c.CmpyID == LoginID && c.Active == true).FirstOrDefault();
}
catch (Exception e)
{
ErrorReport.StoreError("CartMinifiedPartial-Company", e);
-- storing the error for reference
}
저장3210
public static void StoreError(string ErrorPage, Exception e)
{
try
{
eDurar.Models.db_edurarEntities1 DB = new Models.db_edurarEntities1();
eDurar.Models.ErrorTable Err = new eDurar.Models.ErrorTable();
Err.ErrorPage = ErrorPage;
if (e.Message != null)
{
Err.ErrorDetails = e.Message;
}
if (e.InnerException != null)
{
Err.InnerException = e.InnerException.Message.ToString();
}
Err.Date = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));
DB.ErrorTables.AddObject(Err);
DB.SaveChanges();
}
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
throw new NotImplementedException();
}
코드 만 대답하면 좋은 대답이 아닙니다. 몇 줄을 추가하여 문제가 무엇인지 설명하고 코드가 코드를 수정하는 방법을 알려주십시오. – MikeT
시도 {
.. .. ..
}
캐치 (예외 예) {
.. .. ..
} 예외 ex는 모든 예외를 의미합니다.
왜 그렇게하고 싶습니까? 처리 할 수있는 예외 만 잡아야합니다. – Oded
두 가지 모두 작동합니다 ... – pengibot
Google에 매우 쉬운가요? – jgauffin