博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#关键字var是什么,在何种情况下使用
阅读量:5272 次
发布时间:2019-06-14

本文共 2051 字,大约阅读时间需要 6 分钟。

从.NET 3.0开始,在方法内部可以使用var关键字声明局部变量。var关键字到底是什么?在何种情况下使用呢?

 

□ var关键字用来隐式地声明一个数据类型,变量类型是在编译期确定的,而不是在运行时确定的

声明一个var变量a,把整型数10赋值给a,接着把一个字符串赋值给变量a。运行发现报错:无法将类型string隐式转换为int。

这说明:用var声明一个变量时,虽然不是显式声明,但在编译期,已经确定了变量的类型。

 

通过反编译同样可以证明以上推断。

→把a = "abc";这行代码去掉,并生按F6生成解决方案。

→打开"VS2012开发人员命令提示",输入如下命令
→在"解决方案资源管理器"中右键项目的名称,选择"在文件资源管理器中打开文件夹",再点击bin,Debug文件夹,在地址栏中赋值Debug文件夹的路径
→点击"IL DASM"的文件--打开,输入刚才拷贝的Debug文件夹路径,再选择.exe后缀的可执行文件,双击"Main:void(string[])"。在IL代码中:
可以看出:变量a已经是Int类型,并且是一个局部变量。

 

□ var关键字让编码更简短

对于一些名称比较长的类,当创建类实例的时候,用var关键字看上去更简短。当然这个理由是比较牵强的~~

 
class Program
{
static void Main(string[] args)
{
HelloIHaveALongLongName
obj = new HelloIHaveALongLongName
();
}
}
 
public class HelloIHaveALongLongName
{
public string Name;
}
 

 

如果使用var关键字,就变成:

 
var obj = new HelloIHaveALongLongName
();
obj.Name = "hello";

可见,用var关键字,让写法更简短,并且var变量是一个强类型。

 

□ var关键字与匿名类型

通过LINQ表达式返回一个匿名类型。

 
static void Main(string[] args)
{
string[] strs = {"hello", "world", "nice", "to", "meet", "you"};
object o = from s in strs
where s.Length > 3
select new {s.Length, s};
}
以上,object类型变量o并不是一个强类型变量。
   

如果我们用强类型的类来接收LINQ返回的集合。

 
class Program
{
static void Main(string[] args)
{
string[] strs = {"hello", "world", "nice", "to", "meet", "you"};
IEnumerable
o = from s in strs
where s.Length > 3
select new SomeData() {Key = s.Length, Value = s};
foreach (SomeData item in o)
{
Console.WriteLine(item.Key);
}
 
}
}
 
public class SomeData
{
public int Key;
public string Value;
}
 

以上,在IEnumerable<SomeData>类型集合中,每一个集合元素都是强类型。

 

如果用var关键字来接收LINQ返回的匿名类型集合。

 
class Program
{
static void Main(string[] args)
{
string[] strs = { "hello", "world", "nice", "to", "meet", "you" };
var o = from s in strs
where s.Length > 3
select new { Key = s.Length, Value = s };
foreach (var item in o)
{
Console.WriteLine(item.Key);
}
 
}
}
 

以上,var类型变量o接收匿名类型集合,该集合的每个元素也是强类型。也就是说,编译器在编译的时候自动推断类型。

 

总结:

○ 通过var关键字声明的变量,变量类型是在编译期确定的,而不是在运行时确定
○ 对于LINQ表达式返回的匿名类型,可以用var关键字声明的变量接收
○ 对于一些名称比较长的类,类实例化的时候,可以用var关键字声明的变量接收

 

 

 

 

转载于:https://www.cnblogs.com/darrenji/p/3959516.html

你可能感兴趣的文章
面试试题 一 (排列组合)
查看>>
CString转char*实现方法
查看>>
Go直接调用C函数
查看>>
Mac 系统环境变量配置
查看>>
《你的灯亮着吗?:发现问题的真正所在》读书笔记2
查看>>
Winform开发框架之权限管理系统功能介绍
查看>>
从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境
查看>>
视图的定义、更新、撤销
查看>>
iOS之页面传值-----单例传值、通知传值
查看>>
数组换位子
查看>>
软件测试草图
查看>>
一个App项目设计开发完整流程
查看>>
如何使用iClap创建普通批注
查看>>
用Java编写自己的机器人,为你承担苦力
查看>>
第四章App4_3,懂得了抛出异常 throws Exception,read为读取键盘输入数,学会了switch循环...
查看>>
从零开始——MySql01
查看>>
基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
查看>>
sqlmap
查看>>
给出随机存储器(RAM)和只读存储器(ROM)的差别
查看>>
CSS3 3D Transform
查看>>