[C#3] 2-var 类型推断

1.DEMO

复制代码
static void Main()
{
    var Num = 6;
    var str = "乱舞春秋";
    var dou = 9.25d;
    Console.WriteLine(Num);
    Console.WriteLine(str);
    Console.WriteLine(dou);
}
复制代码

var关键字,用来声明并初始化局部变量。编译器根据=右边的语句推断出变量实际的类型。 所以使用var的要求就是右边的语句必须可以让编译器推断出实际的类型。所以=号右边是必须要有值的,即是必须要初始化,不能只是声明。 但是有些不便于阅读代码了。于此同时,C#3.0的出现另一个新特性[匿名类型]给了var用武之地。

var并不是表示弱类型了,如下IL代码:

复制代码
 1 .method private hidebysig static void  Main() cil managed
 2 {
 3   .entrypoint
 4   // 代码大小       41 (0x29)
 5   .maxstack  1
 6   .locals init ([0] int32 Num,
 7            [1] string str,
 8            [2] float64 dou)
 9   IL_0000:  nop
10   IL_0001:  ldc.i4.6
11   IL_0002:  stloc.0
12   IL_0003:  ldstr      bytearray (71 4E 1E 82 25 66 CB 79 ) 
13   IL_0008:  stloc.1
14   IL_0009:  ldc.r8     9.25
15   IL_0012:  stloc.2
16   IL_0013:  ldloc.0
17   IL_0014:  call       void [mscorlib]System.Console::WriteLine(int32)
18   IL_0019:  nop
19   IL_001a:  ldloc.1
20   IL_001b:  call       void [mscorlib]System.Console::WriteLine(string)
21   IL_0020:  nop
22   IL_0021:  ldloc.2
23   IL_0022:  call       void [mscorlib]System.Console::WriteLine(float64)
24   IL_0027:  nop
25   IL_0028:  ret
26 } // end of method Test::Main
复制代码

从第6-8行就可看出编译器做了正确的类型推断。

2.总结

var为编译器技巧,语法糖。匿名类型须此关键字搭配使用

posted @   Timetombs  阅读(771)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
1.DEMO2.总结
点击右上角即可分享
微信分享提示