位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 类型推理

提问人:刘团圆发布时间:2020-12-08

    c#是一种强类型化的语言,这表示每个变量都有固定的类型,只能用于接受该类型的代码中。在前面的所有代码示例中,都采用如下两种形式的代码来声明变量:

    <type> <varName>;

    <type> <varName> = <value>?

下面的代码显不了变量<varNcrme>的类型:

    int mylnt = 5;

    WriteLine(mylnt);

将鼠标指针停放在变量标识符上,IDE就会显示该变量的类型,如图下所示。

    int mylnt = 5;

    WriteLine(nylnt);

            • (local variable) int mylnt

C# 3引入了新关键字van它可以替代前面代码中的type:

    var <varWa/ne> = <value>;

在这行代码中,变量隐式地类型化为<varName>的类型。注意,类型的名称并不是var。在下面的代码中:

    var myVar = 5;

myVar是int类型的变量,而不是var类型的变量,如下所示,IDE也显示了其类型。

    var *ylnt =5;

    WriteLine(mylnt);

            •(local variable) int mylnt

    这是非常重要的一点。使用var时,并不是声明了一个没有类型的变量,也不是声明了一个类型可变的变量。否则,C#就不再是强类型化的语言了。实际上,我们所做的只是依赖于编译器来确定变量的类型。

    如果编译器不能确定用var声明的变量类型,代码就无法编译。因此,在用var声明变量时,必须同时初始化该变量,因为如果没有初始值,编译器就无法确定变量的类型。因此,下面的代码就无法编译:

    var myVar;

var关键字还可以通过数组初始化器来推断数组的类型:

    var myArray = new[] { 4, 5, 2 );


在这行代码中,myArray类型被隐式地设置为int[]。在采用这种方式隐式指定数组的类型时,初始化器中使用的数组元素必须是以下情形中的一种:

    •相同的类型

    •相同的引用类型或null

    •所有元素的类型都可以隐式地转换为一个类型

    如果应用最后一条规则,元素可以转换的类型就称为数组元素的最佳类型。如果这个最佳类型有任何含糊之处,即所有元素的类型都可以隐式转换为两种或更多的类型,代码就不会编译。我们会接收到错误,错误中指出没有最佳类型,如下所示:

    var myArray = new[] { 4, "not an int", 2 };

还要注意数字值从来都不会解释为可空类型,所以下面的代码无法编译:

    var myArray = new[] { 4, null, 2 };

但可以使用标准的数组初始化器,使如下代码可编译:

    var myArray = new int?[] { 4, null, 2 };

    最后一点要说明的是,标识符var并非不能用于类名。这意味着,如果代码在其作用域中(在同一个名称空间或引用的名称空间中)有一个var类,就不能使用var关键字的隐式类型化功能。

    类型推理功能本身并不是很有效,因为在本节前面的代码中,它只会使事情更复杂。使用var会加大判断给定变量的类型的难度。推断类型的概念非常重要,因为它是其他技术的基础。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部