[c#] var 매개 변수가없는 TryParse

C # 6.0의 새로운 기능을 사용하면 TryParse 메서드 내에서 변수를 선언 할 수 있습니다. 몇 가지 코드가 있습니다.

string s = "Hello";

if (int.TryParse(s, out var result))
{

}

하지만 컴파일 오류가 발생합니다.
여기에 이미지 설명 입력

내가 뭘 잘못하고 있니? 추신 : 프로젝트 설정에서 C # 6.0 및 .NET Framework 4.6이 설정됩니다.



답변

C # 6.0의 새로운 기능을 사용하면 TryParse 메서드 내에서 변수를 선언 할 수 있습니다.

선언 식은 C # 6.0에서 잘라 냈으며 최종 릴리스에서는 제공되지 않았습니다. 현재는 그렇게 할 수 없습니다. C # 7 용 GitHub에 대한 제안 있습니다 (향후 참조를 위해이 항목 도 참조).

업데이트 (2017 년 7 월 3 일)

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; }
}


답변