C# 7.0์์์ throw๋ฌธ์ ํํ์(Expression)
using System.Collections;
//c# 7.0์์์ throw๋ฌธ์ ํํ์(Expression)
namespace ExceptionEx
{
class Program
{
static void Main(string[] args)
{
try
{
int? aa = null;
int bb = aa ?? throw new ArgumentNullException();
}
catch (ArgumentNullException e)
{
Console.WriteLine(e.Message);
}
try
{
int[] arr = {1, 2, 3 };
int idx = 5;
int value = arr[idx >= 0 && idx < 4 ? idx : throw new IndexOutOfRangeException()];
Console.WriteLine(value);
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
}
}
}
Output
Value cannot be null.
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at ExceptionEx.Program.Main(String[] args) in C:\Users\shkim\source\repos\ClassEx\practice1\Program.cs:line 24
- c# 7.0์์์ throw๋ฌธ์ ์๋ฌด๋๋ ์ผํญ์ฐ์ฐ์์ ๊ฐ์ด ์์ฑํ๋ ๋ฐฉ์์ธ ๋ฏ ํ๋ค.
- ๊ธฐ์กด ์์ธ์ฒ๋ฆฌ ๊ตฌ๋ฌธ๊ณผ ๋น๊ตํด์ ๋ณด๋๋กํ์.
try-catch finally ๋ฌธ
finally๋ฌธ : ์์ ์ฝ๋์์ ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ๋์ ์คํ๋๋ ์ ์ด๋ค.
try๋ฌธ ๋ด์์ A์ฝ๋, B์ฝ๋, C์ฝ๋๊ฐ ์๋๊ฒฝ์ฐ B์์ ์์ธ๋ฐ์์ C์ฝ๋๋ ์ํ์ด ์๋๋ค.
- ๋ง์ผ C์ฝ๋๊ฐ ๋ฐ๋์ ์คํ๋์ด์ผ ํ๋ ์ฝ๋์์๋ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. C์ฝ๋์ ์๋ก๋ Database ๋ฐ ์์คํ ๋ฆฌ์์ค ์์ ๋ฐ๋ฉ ์ฝ๋ ๋ฑ .. Database ์ปค๋ฅ์ ํด์ ์ฝ๋์ ๊ฒฝ์ฐ ์คํ๋์ง ์์์ ์ ํฅํ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ํด๋น database์ ์ ์ํ ์ ์๋ ์ปค๋ฅ์ ์์ด ์ค์ด๋ค๊ฒ ๋๋ค. => ๊ฒฐ๊ตญ์๋ DB์ ์ ์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค => ์๋ฒ์ ๋ถํ๊ฐ ์๊น.
์ด๋ finally๋ฌธ์ ํตํด ํด๊ฒฐํ ์ ์๋ค. finally๋ฌธ์ ์์ฑํด์ค์ผ๋ก์จ catch๋ฌธ ์ดํ์ ๋ฐ๋์ ์คํ๋๋๋ก ํ๋ฉด ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
finally๋ฌธ ์์ด catch๋ฌธ ์ดํ์ ์์ฑํด์ฃผ๋ฉด ๋์ง ์๋์?
catch๋ฌธ์ด ์ฌ๋ฌ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ๋ฌ๊ฐ์ catch๋ฌธ ๋ค์์ ์ค๋ณต๋ C์ ๊ฐ์ ์ฝ๋๋ฅผ ๊ณ์ํด์ ์์ฑํด์ค์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊น
๋ฐ๋ผ์ finally๋ฌธ์ ๋ง์ง๋ง์ ์์ฑํด์ค์ผ๋ก์จ ์ด๋ฅผ ํด๊ฒฐ.
์ฌ์ฉ ์์ ์ฝ๋
using System.Collections;
namespace ExceptionEx
{
class Program
{
static int divideMethod(int a, int b)
{
try {
return a / b;
}
catch(DivideByZeroException e)
{
Console.WriteLine("๋๋๊ธฐ ์์ธ ๋ฐ์");
throw e;
}
}
static void Main(string[] args)
{
try {
Console.WriteLine("a/b ์์์์ a ์ ๊ฐ์ ์
๋ ฅํ์ธ์ : ");
string aa = Console.ReadLine();
int a = Convert.ToInt32(aa);
Console.WriteLine("a/b ์์์์ b ์ ๊ฐ์ ์
๋ ฅํ์ธ์ : ");
string bb = Console.ReadLine();
int b = Convert.ToInt32(bb);
Console.WriteLine($"{a}/{b} = {divideMethod(a, b)}");
Console.WriteLine("ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
}
catch (DivideByZeroException e)
{
Console.WriteLine($"์๋ฌ : {e.Message}");
}
finally
{
Console.WriteLine("ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
}
}
}
}
Input
a/b ์์์์ a ์ ๊ฐ์ ์
๋ ฅํ์ธ์ :
10
a/b ์์์์ b ์ ๊ฐ์ ์
๋ ฅํ์ธ์ :
0
Output
๋๋๊ธฐ ์์ธ ๋ฐ์
์๋ฌ : Attempted to divide by zero.
ํ๋ก๊ทธ๋จ ์ข
๋ฃ
'๐ป Programming Language > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
32. ๋ธ๋ฆฌ๊ฒ์ดํธ(delegate)์ ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2022.04.08 |
---|---|
31. ์์ธํํฐ(Exception Filter) (0) | 2022.04.08 |
29. System.Exceptionํด๋์ค, throw๋ฌธ (0) | 2022.04.07 |
29-1. Null ๋ณํฉ ์ฐ์ฐ์(Null Operator) (0) | 2022.04.07 |
28. ์์ธ์ฒ๋ฆฌ(Exception Handling) (0) | 2022.04.07 |