2011-11-26 2 views
0

가능한 중복은 :
Use of var keyword in C#암시 형 VAR

C#을 비교적 새로운이기 때문에 나는 MS가 var 암시 입력 된 변수를 소개했다 동기를 궁금 해서요. 당신 이 유형을 직접 선언 한 경우와 마찬가지로

내재적 입력 된 지역 변수가 강력하게 형식화되어 있지만, 컴파일러는 유형을 결정 문서는 말한다. 더

일부 라인 : 많은 경우에

VAR의 사용은 선택 사항이며 단지 구문 편리

입니다 이것은 모든 좋은하지만 내 마음 속에서, 이것은 단지 것 혼란을 야기한다.

이 루프를 검토 중이라고 가정 해 보겠습니다.

foreach (var item in custQuery){ 
    // A bench of code... 
} 

루프의 내용과 의미를 검토하는 대신 항목 유형을 찾는 데 소중한 시간을 할애 할 것입니다. 내가 선호하는 것 대신에 다음

foreach (String item in custQuery){ 
    // A bench of code... 
} 

질문은 : 나는 암시 입력 된 변수는 LINQ를 처리 할 때, 정말 다른 시나리오에서 사용하는 데 도움 않는 도움을 읽었?

List<int> list = new List<int>(); 

이로 전환 할 - -

+4

Visual Studio에서 작업하는 경우 커서를 'var' 키워드 위로 일시 중지하면 실제 유형을 알려줍니다. – BoltClock

+0

어쩌면이 도움이 될 수 있습니다 : http://stackoverflow.com/questions/650919/using-implicitly-typed-local-variables – NotGaeL

답변

5

LINQ를 도입 할 때 var 키워드가 필요하므로 언어가 익명 형식의 강력한 형식의 변수를 만들 수 있습니다.

예 :

var x = new { Y = 42 }; 

이제 x 특정 유형이 강력한 형식의 변수가 있지만, 해당 유형에 대한 이름이 없습니다.

object x = new { Y = 42 }; 

지금 x이 유형 object의 당신이 할 수 있습니다 : 당신이 한 경우와 마찬가지로 당신은, 오브젝트의 데이터를 얻기 위해 반사를 사용하지 않아도 컴파일러는 x.Y 무엇을 의미하는지 알고 x.Y을 사용하십시오.LINQ와 함께 사용하면

는 예를 들어 다음과 같이 할 수 있습니다

var x = from item in source select new { X = item.X, Y = item.Y }; 

x 변수는 이제 T에 이름이없는 특정 유형 인 IEnumerable<T>이다.

var 키워드가 도입 되었기 때문에 코드를 더 읽기 쉽도록 만들고 키 스트로크를 저장하는데도 사용되었습니다.

더 읽기 코드가 될 수 있습니다 예 :

var list = 
    new System.Collections.Generic.List<System.Windows.Forms.Message.Msg>(); 

대신 :

System.Collections.Generic.List<System.Windows.Forms.Message.Msg> list = 
    new System.Collections.Generic.List<System.Windows.Forms.Message.Msg>(); 

유형이 이미 존재로서이의 var 키워드의 좋은 사용하는 것입니다 성명서. SomeMethod 이름은 반환이 변수의 유형이 될 것입니다 무엇인지 분명하지의 입력 한 내용의 표시를 제공하지 않기 때문에

var result = SomeMethod(); 

: 키워드가 오용 될 수있는 경우는 같은 문입니다. 이 경우 var 키워드를 사용하는 대신 유형을 작성해야합니다.

+0

나는 OP가 익명 형식에 필요하다는 것을 깨닫고 명명 된 형식에 대한 사용을 요구하고 있다고 생각합니다. – BoltClock

+0

@BoltClock : 좋은 지적으로, LINQ 외부에서 사용법에 대한 몇 가지 예를 추가했습니다. – Guffa

+0

그래, 명명 된 타입의'var'은 나쁜 생각입니다. 그냥 타이핑을 저장합니다. 그것은 익명의 타입이 그것을 필요로하기 때문에 추가되었습니다. –

2

나는 동기 중 일부는 이런 일을 할 수 있도록 생각

var list = new List<int>(); 

두 번째 예는 더 짧고 읽을 수 있지만, 아직 명확하게 표현 코드의 의도 덜 명확한 경우가 있지만, 많은 상황에서 명확성을 잃지 않으면 서 간결함을 얻습니다.

+1

그리고 - 왜 - 오른쪽 - 이유에 대한 완전한 이름이 있어야합니다,이 더욱 효과적이됩니다. – BoltClock

+1

나는 그것을 사용하는 이유 때문에 타이핑하기가 쉽지 않다. keyboardig는 소프트웨어 개발을위한 핵심 역량이며 (특히 intellisense를 사용하여) 몇 번의 키 스트로크 저장은 그다지 매력적이지 않습니다. 읽기 쉽게 여기에 제시해야 할 인수입니다. 반복을 없애는 것이 가독성을 높이는 데 중요합니다. 타이핑 가능성은 중요한 포인트가 아닙니다. –

+0

+1 나는 VS에 많은 감사를 타이핑하기가 쉽지 않고 멋진 입력이 얼마나 쉬운 지 동의하지만, 좋은 오타를 줄입니다. 그러나 궁극적으로 그것은 그것을 훨씬 더 가독성있게 만듭니다! – aevanko

1

VAR 정말 Linq에있는 비트를 사용하는 익명의 유형에 필요한 : 컬렉션은 익명 형식이기 때문에

var results = 
    from item in context.Table 
    select new {Name=item.Name, id=item.id}; 

, 그것은 이름이 될 수 없습니다. 의 실제 유형은이지만 컴파일하기 전에 이름이없는 것은 아닙니다.