본문 바로가기

프로그래밍&IT/C#

C# 암시적 타입변환 변수, var 타입

C# 암시적 타입변환, var 타입


지역변수의 타입 선언시 int, float, long, char 등으로 명시적으로 해오셨을텐데요.


var를 이용하면 암시적으로 타입변환해서 사용할수있습니다.

- 반복문이나 LINQ사용시 리턴되는 데이터타입관련없이 사용할수있다는 장점이 있으나

   아래 서술되는 항목처럼 몇가지 제한 사항이 존재합니다.


- private, public 등 클래스의 필드데이터로 쓸 수 없다

- 반환값으로 쓸수없다

- 매개변수타입으로 쓸 수 없다

- null 초기화 못함. 컴파일러가 변수의 타입을 추정할 수 없으므로

  단, 참조타입의 경우 할당 후 null할당은 가능

- 형식 제약이 엄격한 타입이므로 원래 초기값과 다른 타입의 값을 가질 수 없다

- nullable지정은 불가능



class Program

    {

        //private var m_Int = 10;       필드데이터로 쓸수없다

       //public var m_str = "HELLO";


       //static var ReturnMethod(var i, var n) { }  반환값, 매개변수 타입으로 쓸수없다


        static void Main(string[] args)

        {

            var v1 = 10;

          var v2 = "HELLO";

            //var v3 = null;        null로 초기화 못함

          //var? v4 = null;       nullable로 지정할수없다


            string[] strs = new string[] { "ABCD", "DDD", "EEE", "FFF" };


            Console.WriteLine("v1:" + v1);

            Console.WriteLine("v2:" + v2);            


          v2 = null;  //초기값(참조타입) 할당후 null할당은 허용.

            Console.WriteLine("v2:" + v2);


            //v2 = 100;     원래 초기값과 다른 타입의 값을 가질수없다


            //반복문

            foreach(var s in strs)

                Console.WriteLine("string: {0}", s);


            //LINQ

            var res = from s in strs

                      where s.StartsWith("A")    //"A"로 시작되는 항목을 LINQ이용해서 가져오기

                      select s;


            foreach(var s in res)

                Console.WriteLine("s:" + s);

        }

    }