본문 바로가기

프로그래밍/C# 프로그래밍

암시적 타입 var 키워드


C# 3.0 에서 추가된 암시적 타입 var


// i is compiled as an int
var i = 5;

// s is compiled as a string
var s = "Hello";

// a is compiled as int[]
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
    from c in customers
    where c.City == "London"
    select c;

// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>                             
var list = new List<int>();

위와 같이 전부 사용가능하다.


또한 바인딩이 런타임이 아닌 컴파일타임에 형변환이 결정된다.


하지만 주의해야 할 점은 다음과 같다.

메소드 내부의 지역변수, for문 foreach문, using문의 초기화 부문에서만

사용가능하며 클래스 필드에서는 사용할 수 없으며 지역변수에서만

사용가능하다.


실제 가장 많이 사용하는 케이스는 아마 이런게 아닐까..

C#의 제너릭 클래스는 IEnumerable를 상속받기 때문에

var enumerator = dropItemList.GetEnumerator(); while (enumerator.MoveNext()) {

// Do Something }


타입에 상관없이 

그냥 웬만한 리스트는 var 타입으로 받아 돌려버리는 케이스가 많아 보인다.


어떻게 보면 만능같지만, 남용하면 안된다.

중첩된 제너릭타입, 타입을 알기 어려운 쿼리문등에 유용하다.

However, the use of var does have at least the potential to make your code more difficult to understand for other developers.

For that reason, the C# documentation generally uses var only when it is required.

MSDN에서도 과도한 var 사용은 다른 개발자가 알아보기 어렵게 만들기

때문에 필요한 경우에만 사용하라고 나와 있다.