답변:
C # 6.0의 새로운 기능을 사용하면 TryParse 메서드 내에서 변수를 선언 할 수 있습니다.
선언 식은 C # 6.0에서 잘라 냈으며 최종 릴리스에서는 제공되지 않았습니다. 현재는 그렇게 할 수 없습니다. C # 7 용 GitHub에 대한 제안 이 있습니다 (향후 참조를 위해이 항목 도 참조).
C # 7의 공식 릴리스와 함께 다음 코드가 컴파일됩니다.
string s = "42";
if (int.TryParse(s, out var result))
{
Console.WriteLine(result);
}
우연히 알게 된 것은 vs2017에서 간결성을 위해 다음과 같이 할 수 있습니다.
if (!Int64.TryParse(id, out _)) {
// error or whatever...
}
이는 C # 7의 새로운 기능으로 패턴 일치와 함께 자주 사용되는 매우 멋진 기능입니다. 이 기능과 그 이상은 C # 팀 블로그 What 's New in C # 7.0에서 발표됩니다 .
팀이 여기서 달성하려는 것은 더 유동적 인 코드입니다. out 변수 목록이 사용되지 않아 매우 길어지는 경우를 기억하십니까? 간단한 예 :
int i;
Guid g;
DateTime d;
if (int.TryParse(o, out i)) { /*use i*/ }
else if (Guid.TryParse(o, out g)) { /*use g*/ }
else if (DateTime.TryParse(o, out d)) { /*use d*/ }
문제가 보이십니까? 모든 변수가 거기에 앉아 아무것도하지 않는 것은 쓸모가 없습니다. 줄 수는 C # 7을 사용하여 절반으로 줄일 수 있습니다.
if (int.TryParse(o, out int i)) { /*use i*/ }
else if (Guid.TryParse(o, out Guid g)) { /*use g*/ }
else if (DateTime.TryParse(o, out DateTime d)) { /*use d*/ }
줄 수를 최소화 할뿐만 아니라 범위에 포함하고 싶지 않은 불필요한 변수 목록도 없습니다. 이렇게하면 의도하지 않았지만 지금은 볼 수있는 변수를 사용할 수 없습니다.
이 기능은 switch
다음 코드에서와 같이 문 에서 패턴 일치에 유용 합니다 (위 코드와 동작이 다릅니다!).
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}