c#에 도입된 튜플은 메서드의 인자 또는 반환에 대해 다중값을 한번에 전달할 수 있는 약식 구문이다.
여러 값을 인자로 또는 반환값으로 쓰고 싶을 때, 아래의 옵션을 고려할 수 있다.
✍ 별도의 클래스
class IntResult
{
public int number;
public bool parsed;
}
class Program
{
static void Main(string[] args)
{
dynamic result = ParseInteger("33");
Console.WriteLine(result.Number);
Console.WriteLine(result.Parsed);
}
static IntResult ParseInteger(string txt)
{
IntResult result = new IntResult();
try
{
result.number = Int32.Parse(txt);
result.parsed = true;
}
catch
{
result.parsed = false;
}
return result;
}
}
✍ dynamic 예약어
class Program
{
static void Main(string[] args)
{
dynamic result = ParseInteger("33");
Console.WriteLine(result.Number);
Console.WriteLine(result.Parsed);
}
static dynamic ParseInteger(string txt)
{
int number;// = 0;
try
{
number = Int32.Parse(txt);
return new {Number = number, Parsed = true};
}
catch
{
return new {Number = 0, Parsed = false};
}
}
}
✍ System.Tuple Generic Type
static void Main(string[] args)
{
Tuple<bool, int> intResult = ParseInteger("33");
Console.WriteLine(intResult.Item1);
Console.WriteLine(intResult.Item2);
}
static Tuple<bool, int> ParseInteger(string txt)
{
int number = 0;
bool parsed = false;
try
{
number = Int32.Parse(txt);
parsed = true;
}
catch
{ }
return Tuple.Create(parsed, number);
}
✍ Tuple
static void Main(string[] args)
{
(bool, int) intResult = ParseInteger("33");
Console.WriteLine(intResult.Item1);
Console.WriteLine(intResult.Item2);
}
static (bool, int) ParseInteger(string txt)
{
int number = 0;
bool parsed = false;
try
{
number = Int32.Parse(txt);
parsed = true;
}
catch
{ }
return (parsed, number);
}
✍ Tuple_변수명 지정1 : 호출자에서 지정
static void Main(string[] args)
{
(bool Prsd, int Nmbr) intResult = ParseInteger("33");
Console.WriteLine(intResult.Prsd);
Console.WriteLine(intResult.Nmbr);
}
static (bool, int) ParseInteger(string txt)
{
int number = 0;
bool parsed = false;
try
{
number = Int32.Parse(txt);
parsed = true;
}
catch
{ }
return (parsed, number);
}
}
✍ Tuple_변수명 지정2 : 메서드에서 지정
static void Main(string[] args)
{
var intResult = ParseInteger("33");
Console.WriteLine(intResult.Prsd);
Console.WriteLine(intResult.Nmbr);
}
static (bool Prsd, int Nmbr) ParseInteger(string txt)
{
int number = 0;
bool parsed = false;
try
{
number = Int32.Parse(txt);
parsed = true;
}
catch
{ }
return (parsed, number);
}
}
✍ Tuple의 이름 없이 개별 필드로 받기
static void Main(string[] args)
{
(var success, var val) = ParseInteger("33");
Console.WriteLine(success);
Console.WriteLine(val);
}
🧐 System.Tuple vs System.ValueTuple