推断类型var

1、为什么使用推断类型var

var可以根据变量的初始值自动推断局部变量类型,当无法确定所用变量的具体类型时可使用var

2、如何使用推断类型var

客户端代码

        static void Main(string[] args)
        {
            var a = 10;
            var className = "var的学习";
            //var student = new Student{StudentName = "王华", Age = 27};//创建对象
            var student = new { StudentName = "王华", Age = 27 };//匿名类
            Console.WriteLine("{0}个人在进行{1}, 其中{2}, {3}岁,掌握的最好!", a, className, student.StudentName, student.Age);
            Console.ReadLine();
        }

Sudent类定义

    public class Student
    {
        public string StudentName { get; set;}
        public int Age { get; set;}
        public int StudentId { get; set;}
    }

输出

由此可见var可以根据变量的值来推断变量的类型

注:匿名类:匿名类不需要提前编写类及其成员,并且只能添加属性不能添加方法,匿名类并不是无名,而是编译器在后台生成类名

3、推断类型var使用时注意的问题

(1) 使用var的变量必须为局部变量,成员变量无法用var修饰

(2) 使用var时该变量必须同时初始化,并且不能为空

(3) var本身不是定义一个新类型

4、var和object的区别

var和object很类似,但是有一些区别,var在推断变量的类型后不能再对该变量进行其他类型的赋值,object没有这点限制

        static void Main(string[] args)
        {
            object a = 10;
            a = "应该对了";

            var b = 10;
            b = "错了吗?";
        }

前者a编译没问题,后者b有问题,由此可以看出var和object的区别

时间: 2024-07-28 15:30:53

推断类型var的相关文章

强类型,弱类型和推断类型

一.强类型 在编译时就知道的类型.如: int i=1; 能点出来的也是强类型. 二.弱类型 在运行时才知道的类型. dynamic dynamic= new ExpandoObject();            dynamic.Name = "张三"; 通过索引器读出来的是弱类型.如:dr["id"]; 三.推断类型 var s="ss"; 反编译后发现s是string类型的.说明,在编译期间已经知道了类型.所以,var类型是强类型. var

隐式类型var

隐式类型var (1)现在越来越多的项目中你可以看到var,这是什么意思呢?其实这就是C#3.0新特性提供的隐士类型var,var关键字指示编译器根据初始化语句右侧的表达式推断变量的类型. var Kencery="大家晚上好";   //定义变量 var list=new List<int>();    //定义一个List集合 var Kencery=new{ID=1,Name="HYL",age=24}  //对象初始化起定义的类型 var gen

C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法

1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName { get { return _userName; } set { _userName= value; } } //现在 只适合3.5以上 public string_userName {get;set;} 2.隐式类型var 它是在编译已经能确定变量的类型,是根据后面的值自动推断类型,编译时把推

匿名类型var自动类型推断

using System; namespace Frank { public class Sample { public static void Main(string[] args) { var name = "Bugs Bunny"; var age = 25; var isRabbit = true; Type nameType = name.GetType(); Type ageType = age.GetType(); Type isRabbitType = isRabbit

C# 8:new关键字将能够推断类型

在许多情况下,在给定的位置只能是确定的类型.但是C#却要求显示的列出类型名称.如果Target-typed new表达式的建议被采纳,像这样的模板代码将不再需要. 表面上看,这个特征跟var关键字相反.但是它不是从表达式中推断变量类型,而是从变量中推断表达式的类型.下面分别是使用当前语法及建议语法的例子. //当前语法 Dictionary<string, List<int>> field = new Dictionary<string, List<int>>

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰. 类的概念: 类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 类中的数据和函数称为类的成员:数据成员        函数成员 数据成员: 数据成员

auto function -&gt; return type 当不能从{}内推断类型时

示例: 1 template<class F, class... Args> 2 auto ThreadPool::enqueue(F&& f, Args&&... args) 3 -> std::future<typename std::result_of<F(Args...)>::type> result_of可以推断函数F(Args...)的返回值类型, auto ->表明函数返回类型为std::future<ty

项目知识储备-自动属性 隐式类型Var

在项目中应用到的一些基本的小知识点,也不知道原理是什么 ,也不知道为什么.今天查了一下,原来这些东西在 之前的视频中就看到过.小小总结一下. 在 C# 3.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁. 客户端代码还可通过这些属性创建对象. 知识点一:自动属性 例如下面 class myClass{ //一般属性用法 privae string name; public string Name{ get { return name;} set { nam

推断类型:decltype()的简单应用

template<class T, class U> auto operator+(const Matrix<T>& a, const Matrix<U>& b) -> Matrix<decltype(T{}+U{})> { Matrix<decltype(T{}+U{})> res; for(int i=0; i!=a.rows(); ++i) for(int j=0; j!=a.cols(); ++j) res(i,j)