C#,入门教程(16)——可变数据类型(var)的基础知识与使用禁忌

发布时间:2024年01月15日

上一篇:

?C#,入门教程(15)——类(class)的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124012719

一、权威说法

先看看 微软 怎么说?

从 C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var。 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但编译器决定类型一样。 i 的以下两个声明在功能上是等效的:

var i = 10; // Implicitly typed.
int i = 10; // Explicitly typed.

重要

在启用var的情况下使用?var?时,即使表达式类型不可为空,也始终表示可为空引用类型。 编译器的 null 状态分析可防止取消引用潜在的?null?值。 如果从未向可能为 null 的表达式分配该变量,编译器将不会发出任何警告。 如果将该变量分配给可能为 null 的表达式,则必须先测试其是否为 null,然后才能将其取消引用,以避免出现任何警告。

var?关键字的常见用途是用于构造函数调用表达式。 使用?var则不能在变量声明和对象实例化中重复类型名称,如下面的示例所示:

var xs = new List<int>();

?从 C# 9.0 开始,可以使用由目标确定类型的?表达式作为替代方法:

List<int> xs = new();
List<int>? ys = new();

在模式匹配中,在?var中使用?var?关键字。

示例

下面的示例演示两个查询表达式。 在第一个表达式中,var?的使用是允许的,但不是必需的,因为查询结果的类型可以明确表述为?IEnumerable<string>。 不过,在第二个表达式中,var?允许结果是一系列匿名类型,且相应类型的名称只可供编译器本身访问。 如果使用?var,便无法为结果新建类。 请注意,在示例 #2 中,foreach?迭代变量?item?必须也为隐式类型。

// Example #1: var is optional when
// the select clause specifies a string
string[] words = { "apple", "strawberry", "grape", "peach", "banana" };
var wordQuery = from word in words
                where word[0] == 'g'
                select word;

// Because each element in the sequence is a string,
// not an anonymous type, var is optional here also.
foreach (string s in wordQuery)
{
    Console.WriteLine(s);
}

// Example #2: var is required because
// the select clause specifies an anonymous type
var custQuery = from cust in customers
                where cust.City == "Phoenix"
                select new { cust.Name, cust.Phone };

// var must be used because each item
// in the sequence is an anonymous type
foreach (var item in custQuery)
{
    Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}

二、问题的答案

1、不得不用的场景

Linq 场景显然不得不用,否则代码的阅读性就比较差啦。

2、其他场合都不应该使用!

为什么?没有合作精神!

var 只是编写程序的时候方便?但如果以后自己或他人来阅读代码的时候,都不知道变量的实际类型是 int 还是 double ,多么的无语?python,java 等语言大量使用 隐匿变量,导致程序员的无聊工作大量增加,不得不靠人力堆积才解决问题。程序员的精力几乎都耗费在修修补补上了。

写程序要多为别人和以后的自己着想!

下一篇:

C#,入门教程(17)——条件语句(if-else)的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124033376

文章来源:https://blog.csdn.net/beijinghorn/article/details/124032216
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。