C#学习笔记(二十七) 关键字VAR


从C# 3开始,在方法范围内声明的变量可以具有隐式类型var。 
隐式类型本地变量为强类型,编译器可以根据变量的初始化值推断出变量的类型。
例如 var i = 0; 和 int i = 0; 是等效的。

使用var的规则
    1.只能用于本地变量,而不能用于字段
    2.只能在变量声明中包含初始化时使用
    3.一旦编译器推断出变量的类型时,var就是固定的,且不可修改 
    4.变量必须初始化,而且变量不能为空,否则,编译器不能推断出变量类型。
    5.变量初始化时必须放在表达式中
    6.不能把初始化器设置为对象,除非在初始化器中创建新对象。

        static void Main(string[] args)
        {
            var name = "cat";
            var age = 5;
            var isCat = true;

            Type nameType = name.GetType();
            Type ageType = age.GetType();
            Type isCatType = isCat.GetType();

            Console.WriteLine($"name's type is {nameType}");
            Console.WriteLine($"age's type is {ageType}");
            Console.WriteLine($"isCat's type is {isCatType}");
        }

var 和new一起使用时,可以声明一个匿名类型的对象,匿名类型的对象是继承自Object类型且没有名称的类,该类可以从类初始化器中推断。
如果初始化器中的设置的值是另一个对象的成员,就可以简化初始化器,编译器通过对象的成员推断中新的类型。

匿名类型的对象不能进行任何类型的反射,因为这不会得到一致的结果。

    class Program
    {
        static void Main(string[] args)
        {
            var name = "cat";
            var age = 5;
            var isCat = true;

            Type nameType = name.GetType();
            Type ageType = age.GetType();
            Type isCatType = isCat.GetType();

            var Cat = new
            {
                name = "cat",
                age = 5,
                isCat = true
            };

            CatClass catClass = new CatClass();

            var Cat2 = new
            {
                catClass.Name,
                catClass.Age,
                catClass.IsCat
            };


            Type catType = Cat.GetType();

            Console.WriteLine($"name's type is {nameType}");
            Console.WriteLine($"age's type is {ageType}");
            Console.WriteLine($"isCat's type is {isCatType}");
            Console.WriteLine($"Cat's type is {catType}");
        }
    }

    class CatClass
    {
        public string Name { get; set; }

        public int Age { get; set; }
        public bool IsCat { get; set; }
    }
发布了35 篇原创文章 · 获赞 67 · 访问量 8514

猜你喜欢

转载自blog.csdn.net/EngraveSmile/article/details/103421053
今日推荐