728x90
- try ~ catch 키워드
- 프로그램의 안정성
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _111_try_catch
{
class Program
{
static void Main(string[] args)
{
int inputNum = 0;
bool isCorrect = false;
while(!isCorrect)
{
Console.WriteLine("입력문자 : ");
string readStr = Console.ReadLine();
try
{
inputNum = int.Parse(readStr);
isCorrect = true;
}
catch(FormatException e)
{
Console.WriteLine(e.Message);
Console.WriteLine("입력문자 : " + readStr + "정수 입력 하세요");
}
}
Console.WriteLine("inputNum : " + inputNum);
}
}
}
- System.Exception
- 예외 클래스의 Base
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _112_Exception
{
class Program
{
static void Main(string[] args)
{
int maxNum = 10;
try
{
checked
{
maxNum += Int32.MaxValue;
}
}
catch(OverflowException e)
{
Console.WriteLine("e.Message : " + e.Message);
Console.WriteLine("e.Source : " + e.Message);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("maxNum : " + maxNum);
}
}
}
- throw 키워드
- 상위 호출 메소드로 예외 객체를 전달
- 조건 연산자에서 사용
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _113_throw
{
class Program
{
static void ThrowFunc(int data)
{
if(data > 0)
{
Console.WriteLine("ThrowFunc data : " + data);
}
else
{
throw new Exception("data에 0이 입력되었습니다.");
}
}
static int ThrowDivision(int a, int b)
{
if (a > 0 && b > 0)
return a / b;
else
throw new Exception("0보다 작은 값은 불가합니다.");
}
static void Main(string[] args)
{
try
{
ThrowFunc(10);
ThrowFunc(100);
ThrowFunc(0);
ThrowFunc(1000);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
try
{
Console.WriteLine("100/20 : " + ThrowDivision(100, 20));
Console.WriteLine("10/5 : " + ThrowDivision(10,5));
Console.WriteLine("10/0 : " + ThrowDivision(10, 0));
Console.WriteLine("100/100" + ThrowDivision(100, 100));
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
int? a = null;
try
{
int b = a ?? throw new ArgumentNullException();
}
catch(ArgumentNullException e)
{
Console.WriteLine(e.Message);
}
int result = 101;
try
{
int checkNum = (result < 100) ? result : throw new Exception("100 이하만 가능");
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
- try ~ catch ~ finally 키워드
- 예외 상황과 관련 없이 무조건 처리
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _114_finally
{
class Program
{
static void ThrowFunc(int data)
{
if(data > 0)
{
Console.WriteLine("ThrowFunc data : " + data);
}
else
{
throw new Exception("data에 0이 입력되었습니다.");
}
}
static void Main(string[] args)
{
try
{
ThrowFunc(10);
ThrowFunc(100);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine(" finally 무조건 실행 \n");
}
try
{
ThrowFunc(0);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine(" fianlly 무조건 실행 ");
}
}
}
}
- 사용자 정의 예외 클래스
- 기존 예외처리 클래스에서 상속
- when 키워드, StackTrace 키워드
ystem;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _115_CustomException
{
class MyException : ApplicationException
{
public int Num { get; set; }
public MyException():base()
{
}
public MyException(int a)
{
Num = a;
}
public override string ToString()
{
return "Num : " + Num;
}
}
class Program
{
static void Main(string[] args)
{
string readStr = Console.ReadLine();
try
{
int num = int.Parse(readStr);
if (num == 0 || num == 10)
throw new MyException(num);
}
catch(MyException e) when(e.Num == 0)
{
Console.WriteLine("when(e.Num == 0)");
Console.WriteLine("MyException : " + e.Num);
Console.WriteLine("MyException : " + e.StackTrace);
}
catch(MyException e) when(e.Num == 10)
{
Console.WriteLine("when(e.Num == 10)");
Console.WriteLine("MyException : " + e.Num);
Console.WriteLine("MyException : " + e.ToString());
Console.WriteLine("MyException : " + e.StackTrace);
}
}
}
}
728x90
'게임 프로그래밍 > C#' 카테고리의 다른 글
C# 람다식 Ramdba (0) | 2021.12.21 |
---|---|
C# 대리자 delegate & 이벤트 event (0) | 2021.12.21 |
C# 함수/클래스 일반화(Generic 제네릭) (0) | 2021.12.20 |
C# 컬렉션(ArrayList,Queue,Stack,Hashtable) (0) | 2021.12.20 |
C# RPG게임 예제 코드 (0) | 2021.12.20 |