最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#隐式类型变量(var)的使用与限制

CSharp 宇托 247浏览 暂无评论

从3.0开始,C#引入了隐式类型变量的关键字var。这是一个用得很爽的关键字,在很多地方都可以用,不过它也有一些注意点。在使用时我们要注意以下几个方面。

  • var申明的隐式类型变量也是强类型的。

  • var只能用于局部变量,不能用于类属性和字段。

  • var在申明后必须初始化,用更通俗的话来说,var只不过是类型的简写,在编译时会把var替换成对应的类型。如果编译器不能推断出类型(比如null),就会出现编译错误。

我个人觉得它主要可以用于以下几个方面。

  • for语句里,如for (var i = 1; i < 10; i++)
  • foreach语句里,如foreach (var item in list)
  • using语句里,如using (var sreader = new StreamReader("C:\\myfile.txt"))
  • 用在linQ语句里,如var expr = from c in customers select c.name;
  • 用在比较长的类型里,如var list = new List<Dictionary<string, Customer>>();

var申明的数字变量的编译器推断。

  • 在没有用数字申明后缀(D,L,F)的整数推断为int(System.Int32)
  • 在没有用数字申明后缀(D,L,F)的小数推断为double(System.Double)。

下面用一些例子来说明

1. 用var申明的隐式类型变量也是强类型的。比如下面的代码会出现编译错误。

C#
var intVal = 10;
// intVal是int类型,不能再把字符串赋值给int型
intVal = "test";

2. var只能用于局部变量,不能用于类属性和字段。比如下面的代码会出现编译错误。

C#
class Test {
    // 不能用于类字段
    private var intVal = 10;
    // 不能用于类属性
    private var TestVal { get; set; }
}

3. var在申明后必须初始化。比如下面的代码会出现编译错误。

C#
// intVal未初始化
var intVal;
intVal = 10;

4. 编译器不能推断出类型。比如下面的代码会出现编译错误。

C#
// 编译器无法从null推断出类型
var testValue = null;

5. var的默认数字类型。比如下面的代码

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var intVal = 1;
            var doubleVal = 1.0;

            Console.WriteLine(intVal.GetType());
            Console.WriteLine(doubleVal.GetType());
        }
    }
}

其输出为

System.Int32
System.Double

参考地址:
隐式类型的局部变量(C# 编程指南)
2.2.2 隐式类型局部变量的使用和限制

转载请注明:宇托的狗窝 » C#隐式类型变量(var)的使用与限制

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址