C# - var 关键字

2023-10-31

引言

C# 代码经常会看到 var 关键字定义一个变量,带点神秘色彩,今天就来揭秘一下。

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

var 关键字使用规则

如果编译器可以从初始化表达式推断类型,我们可以使用关键字 var 来声明变量类型,推断类型可以是内置类型、匿名类型、用户定义类型或 .NET 类库中定义的类型。

举例: i 的以下两个声明在功能上是等效的:
var i = 10;
var 关键字隐藏了 i 的类型,在编译时,会根据右边的值的类型来确定 i 的类型是 int。

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

隐式类型变量是静态类型的,也就是一旦确定类型就不能更改类型,但你可以更改成相同类型的值。
例如:下面操作,编译会出错
Cannot implicitly convert type 'type' to 'type'

var i = 10;
 i = "a";

var 只能用来定义方法内的局部变量,如果定义在其它范围(如:类的字段),会有编译错误 The contextual keyword 'var' may only appear within a local variable declaration.

var 在表达式中的应用

例 1 :var 可以选

var 的使用是允许的,但不是必需的,因为查询结果的类型可以明确表述为 IEnumerable< string > 。

  IEnumerable<string> 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);
}                            

但用 var 更简洁,只是一种语法便利,比如,有时类名太长,用 var 更合适,可以偷懒敲长长的类名。

// 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;

例 2:var 必要

在使用匿名类型初始化变量时,如果需要在以后访问对象的属性,则必须将变量声明为 var。 这是 LINQ 查询表达式中的常见方案。

从源代码角度来看,匿名类型没有名称。 因此,如果使用 var 初始化了查询变量,则访问返回对象序列中的属性的唯一方法是在 foreach 语句中将 var 用作迭代变量的类型。

class ImplicitlyTypedLocals2
{
    static void Main()
    {
        string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

        // If a query produces a sequence of anonymous types,
        // then use var in the foreach statement to access the properties.
        var upperLowerWords =
             from w in words
             select new { Upper = w.ToUpper(), Lower = w.ToLower() };

        // Execute the query
        foreach (var ul in upperLowerWords)
        {
            Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
        }
    }
}
/* Outputs:
    Uppercase: APPLE, Lowercase: apple
    Uppercase: BLUEBERRY, Lowercase: blueberry
    Uppercase: CHERRY, Lowercase: cherry
 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - var 关键字 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • python菜鸟学习Day10(SMTP发送邮件及带附件及错误及发送短信)

    我们通过http协议可以访问网站 同样 我们通过SMTP协议可以发送邮件 python中的smtplib模块对SMTP进行了简单封装 可以实现源地址向目标地址发送邮件 方法 含义 SMTP host port local hostname
  • Vue项目打包并发布的完整步骤记录

    如何将Vue项目打包并发布 我这边是测试发布到本地 不过步骤是一样的 步骤如下 1 安装部署Nginx服务器 说明 Nginx engine x 是一个高性能的HTTP和反向代理服务器 也是一个IMAP POP3 SMTP服务器 同时 也是
  • HttpRunnerManager部署

    基于HttpRunner的接口自动化测试平台 HttpRunner djcelery and Django HttpRunner手册 http cn httprunner org git地址 httprunner HttpRunnerMan
  • Java空指针异常:java.lang.NullPointException原因

    Java空指针异常在工作中经常看到 之前我不是很懂这个概念以为如果某个对象没初始化就会报错结果不是 我通过debug打断点发现了具体原因和解决方法 原因 在excel上传解析的时候发现 如果没有初始化对象 里面就是null的 没有分配空间
  • Python爬虫自学要多久?

    时下python爬虫成为时下一种流行的编程语言 从零开始学python爬虫知识要多久了 所谓爬虫是指网络爬虫 web spider 如果把互联网比作一张巨大无比的蜘蛛网 那么web spider就是在这张网上爬来爬去的蜘蛛 而爬虫是通过py
  • 双向电平转换芯片TXB0304应用笔记

    TXB0304作为新一代自动识别方向的电平转换芯片 跟上一代同类器件TXB0104相比 具有更低的工作电压 0 9V 更高的转换速率 1 8V 3 3V间电平转换时最高速率140MBPS 以及更小的封装等优势 也正是因为需要在较低工作电压时
  • 自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件

    转载自 http blog csdn net w397090770 article details 7768129 下面我讲下处理pdf文件的 这里我用了PD4ML来处理的 原因有几个 1 它对CSS的支持做的很好 2 可以处理图片 很爽吧
  • python——获取当前文件路径

    1 os getcwd os getcwd 不需要参数 os getcwd 获取的是当前工作的路径 也就是脚本运行的地方 而不是脚本本身所存在的地方 代码 print os getcwd 测试结果 2 os path abspath os
  • npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! webpack_test@1.0.0 dev: `webpack` npm ERR! Exit s

    webpack打包时 报如图错误 问题产生的原因 webpack版本过高 导致npm i 时安装的依赖不再出现在node modules中 从而命令执行报错 解决方案1 运行npm i dev 安装一下开发环境下的依赖即可 随后再执行需要运
  • 云计算虚拟机技术-KVM安装

    云计算虚拟机技术 KVM安装 作者 尹正杰 版权声明 原创作品 谢绝转载 否则将追究法律责任 身为运维的小伙伴估计大家都清楚KVM 因为在CentOS里面KVM还算很折腾的一个软件 早期CentOS使用的xen虚拟化 后因收购KVM 于是就
  • 程序员工具网站(比较有意思)

    http www cxy521 com index html
  • html中中文显示乱码,网页中文显示乱码问题

    大家好 本人目前在学习ASP NET MVC5 出现了网页显示中文乱码的问题 诡异的是Home Index页面下的中文是可以正常显示的 其他页面的中文就不能正常显示了 不能正常显示中文的页面中 通过后台代码显示的字符串是正常的 直接卸载HT
  • Oracle数据库 Explain工具(语句执行索引使用情况)

    1 Explain工具的作用 Explain工具可以查看SQL语句的执行过程SQL索引的使用情况 2 Oracle数据库查看语句执行的情况语句 explain plan for select id from abc where a 1 an
  • 不确定性世界中的行为预测

    桔妹导读 自动驾驶系统中的行为预测模块主要负责预判其他交通参与者未来一段时间的行为 其困难主要源自现实世界和人类行为的高度不确定性 本文列举了现实环境中的不同场景 讨论了两种不同预测方法 即基于行为规划的预测和基于机器学习的预测 用于准确预
  • 多元统计分析实验-线性回归

    1 实验目的 通过本实验使学生熟练运用python语言编写线性回归分析程序 2 实验内容 有以下两组数据 第一组数据为我国2004年31个地区城镇居民年人均可支配收入和年人均消费性支出数据 第二组数据为随机抽查的36个人的当前年薪y 美元
  • 基于直方图均衡化的水下激光图像处理(MATLAB仿真)

    原文 http blog csdn net sunlinyi66 article details 39215447 基于直方图均衡化的水下图像增强 MATLAB仿真 可以对RGB三个通道进行直方图规定化从而实现水下图像增强 此处我们使用的是
  • python爬虫学习34

    python爬虫学习34 目录 python爬虫学习34 九 parsel 库的使用其一 9 1 parsel 库的下载 9 2 初始化 9 3 提取文本 今天呢就进入到爬虫网页数据解析提取的最后一个小节 与大家一同学习parsel库的使用
  • 牛客网 D-坐标计数

    链接 https ac nowcoder com acm contest 10746 D 来源 牛客网 题目描述 定义一个坐标变换 坐标 x y 变换后变为 x y x y 给定一片矩形区域 计算区域内有多少个整数点在经过有限次变换后变为
  • redis持久化机制

    redis持久化机制 https www jianshu com p 9d6cebe98d5a
  • C# - var 关键字

    C var 关键字 引言 var 关键字使用规则 var 在表达式中的应用 例 1 var 可以选 例 2 var 必要 引言 C 代码经常会看到 var 关键字定义一个变量 带点神秘色彩 今天就来揭秘一下 从 C 3 0 开始 在方法范围