var 매개 변수가없는 TryParse


93

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

string s = "Hello";

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

}

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

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

답변:


152

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

4
정보 주셔서 감사합니다! 최종 릴리스에서 잘라낸 것이 깜짝 놀랐습니다. 저에게는 멋진 기능입니다.
Anton23 2015

2
Anton23하자 희망 @ 그것은 :) 다음 C # 7에 들어간
Yuval 교수 Itzchakov

2
그것은 나에게 가장 기대되는 기능이었습니다.
Tuyen Pham

적어도 C # 7 / VS2017에 있습니다.
ssmith

1
말 그대로 한 문장 더 읽을 수 없습니까? C # 7을 표시하는 대답은 6.0에서 잘라 졌다고 설명합니다. 사람들은 여전히 ​​C # 6.0에서 개발
Fus Ro Dah

15

우연히 알게 된 것은 vs2017에서 간결성을 위해 다음과 같이 할 수 있습니다.

if (!Int64.TryParse(id, out _)) {
   // error or whatever...
}

2
그것은 폐기 연산자입니다.
Patrick Hofman

9

이는 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; }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.