C # 3에서 'var'키워드 사용에 대해 동료들과 토론 한 후 var를 통한 유형 유추의 적절한 사용에 대한 사람들의 의견이 궁금했습니다.
예를 들어, 나는 의심스러운 상황에서 var를 게으르게 사용했습니다.
foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
var의 합법적 사용은 다음과 같습니다.
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
흥미롭게도 LINQ는 약간 회색 영역으로 보입니다.
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be here.
IEnumerable을 구현하는 유형이 될 것이라는 결과는 분명하지만 새로운 객체를 선언하는 var와 같은 방식으로 완전히 명확하지는 않습니다.
LINQ가 객체와 관련하여 더 나쁩니다.
var results = from item in someList
where item != 3
select item;
이것은 동등한 foreach (var list in someList) {// ...} 동등성보다 낫습니다.
예를 들어 IEnumerable <int> 및 IEnumerable <double>을 허용하는 오버로드 된 메서드에 해당 쿼리 결과를 배치하려는 경우 호출자가 실수로 잘못된 형식으로 전달할 수 있습니다.
var
않는 당신이 의도하지 않게하는 방법에 잘못된 유형을 통과 할 때, 과부하 평균 컴파일러 오류가 발행되지 않을 때 확대되는 것을 강력한 입력을 유지하지만, 질문 유형이 정의에 즉시 나타나지 않을 것이 위험하다 정말 여부입니다.
var i = 0;
== 실패! var c = new CrazyFrigginLongClassName();
== 승리!
var readabilityBeDamned = true;