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 사용은 다른 개발자가 알아보기 어렵게 만들기
때문에 필요한 경우에만 사용하라고 나와 있다.
'프로그래밍 > C# 프로그래밍' 카테고리의 다른 글
IComparable, IComparer 비교정렬 (0) | 2015.10.13 |
---|---|
C#에서 typedef 사용법 (0) | 2015.10.06 |
Int32.Parse(), Convert.ToInt32(), Int32.TryParse() 차이 (0) | 2015.10.05 |
제너릭 클래스의 조건지정 - Where (1) | 2015.10.02 |
C# 튜토리얼 사이트 (1) | 2015.10.02 |