C#에서는 프로그래머가 타입을 명시하지 않아도 추론하는 타입 추론을 제공한다. C++에서 auto 키워드에 해당하는 것으로는 var가 존재하며, dynamic 같은 경우에는 따로 제공하지 않는다.

var

컴파일러에게 해당 타입을 추론하게 하는 키워드이다. 그러므로 var 키워드를 사용하는 변수는 컴파일 시점에 추론이 되어야 하기 때문에 선언과 동시에 초기화가 되어야 한다.

var number = 10; // int로 추론된다.
var message = "Hello"; // string으로 추론된다.

dynamic

var와 다르게 컴파일 시점에 타입 추론이 발생하지 않고, 런타임 시점에 대입 되는 값의 따라서 형이 변경된다.

또, 원본의 특성(프로퍼티나 메소드)를 잃는 object형으로 업캐스팅과 다르게 원본형을 가지고 있어서 특성을 바로 활용할 수 있다는 장점이 있다. 대신 C#의 리플렉션기능과도 연관이 있고, 런타임에 진행되다 보니 느리다.

지역 변수 외에도, 메서드의 매개 변수나 리턴 반환형에도 적용 할 수 있다.