var (C# 참조)

C# 3부터 메서드 범위에서 선언된 변수에 암시적 “형식” var을 사용할 수 있습니다. 암시적 형식 지역 변수는 형식을 직접 선언한 것처럼 강력한 형식이지만 컴파일러가 형식을 결정합니다. i의 다음 두 선언은 기능이 동일합니다.

var i = 10; // Implicitly typed.
int i = 10; // Explicitly typed.

중요

null 허용 참조 형식을 사용하도록 설정하고 var를 사용하면 식 형식이 null 허용이 아니더라도 항상 null 허용 참조 형식을 의미합니다. 컴파일러의 null 상태 분석은 잠재적 null 값이 역참조되지 않도록 보호합니다. null일 수 있는 식에 해당 변수가 할당되지 않은 경우 컴파일러는 경고를 내보내지 않습니다. null일 수 있는 식에 변수를 할당하는 경우 경고를 방지하기 위해 이 변수를 역참조하기 전에 null이 아닌지 테스트해야 합니다.

var 키워드는 일반적으로 생성자 호출 식과 함께 사용됩니다. var를 사용하면 다음 예제와 같이 변수 선언 및 개체 인스턴스화에서 형식 이름을 반복하지 않을 수 있습니다.

var xs = new List<int>();

C# 9.0부터 대상으로 형식화된 new을 대신 사용할 수 있습니다.

List<int> xs = new();
List<int>? ys = new();

패턴 일치에서 var 키워드는 var 패턴에 사용됩니다.

예제

다음 예제에서는 두 가지 쿼리 식을 보여 줍니다. 첫 번째 식에서는 var을 사용할 수 있지만, 쿼리 결과의 형식을 IEnumerable<string>으로 명시적으로 정의할 수 있기 때문에 필요하지 않습니다. 그러나 두 번째 식에서 var은 결과가 익명 형식의 컬렉션이 되도록 허용하고 해당 형식의 이름은 컴파일러 자체에만 액세스할 수 있습니다. var을 사용하면 결과에 대한 새 클래스를 만들 필요가 없습니다. 예제 #2에서는 foreach 반복 변수 item도 암시적 형식이어야 합니다.

// Example #1: var is optional when
// the select clause specifies a string
string[] words = { "apple", "strawberry", "grape", "peach", "banana" };
var wordQuery = from word in words
                where word[0] == 'g'
                select word;

// Because each element in the sequence is a string,
// not an anonymous type, var is optional here also.
foreach (string s in wordQuery)
{
    Console.WriteLine(s);
}

// Example #2: var is required because
// the select clause specifies an anonymous type
var custQuery = from cust in customers
                where cust.City == "Phoenix"
                select new { cust.Name, cust.Phone };

// var must be used because each item
// in the sequence is an anonymous type
foreach (var item in custQuery)
{
    Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}

참고 항목