C# 在C中使用var而不是var关键字#
我对var和非var初始化有一些混淆C# 在C中使用var而不是var关键字#,c#,C#,我对var和非var初始化有一些混淆 var x=10; x=12; C#中的初始化有什么区别 我知道var是用于以下方式的关键字 当类型很难写入时,例如LINQ查询(首先是var的原因)使用var 谢谢 湿婆这是一个编译 var x=10; 在这个场景中,这一个并不假设您正在尝试初始化x x=12; 它必须是: int x = 12; 现在,var x=12和intx=12无。它们都是在编译时解析的。第一个用于声明和分配局部变量x。声明的新变量将自动获取=右侧的(强且非动态)类型。在
var x=10;
x=12;
C#中的初始化有什么区别
我知道var是用于以下方式的关键字
当类型很难写入时,例如LINQ查询(首先是var的原因)使用var
谢谢
湿婆这是一个编译
var x=10;
在这个场景中,这一个并不假设您正在尝试初始化x
x=12;
它必须是:
int x = 12;
现在,
var x=12代码>和intx=12代码>无。它们都是在编译时解析的。第一个用于声明和分配局部变量x
。声明的新变量将自动获取=
右侧的(强且非动态)类型。在您的示例中,这是类型int
第二个用于(仅)分配给已在别处声明的变量或属性
var x = 10;
等于
int x = 10;
是极好的语法糖
当您写入x=10
时,您的x
必须在之前声明。var
它是在C#3.0中引入的
当你不知道你要处理的是什么类型时,最好使用var
,它从任务右侧的定义位置获取类型
var x =10;
x=12;
在第一种情况下,编译器在运行时解析声明
让我们假设一下,如果你愿意的话
var x=10;
x="I am String";
将引发错误,因为编译器已确定x
的类型为System.Int32(当值为10时)。现在给它赋值会违反类型安全性
优势
var
与c#3匿名类型和泛型结合使用时非常方便。匿名类型仍然是clr类型,但在编码时不能有类型名称
但是,为了更好的可读性,最好使用命名约定要使用var
关键字,必须有一个表达式,该表达式在equals(=)的右侧有一个类型才能编译
var myNumber=1代码>将起作用,因为var将被编译为int类型<代码>myNumber=1
将不起作用,因为myNumber未声明。如果要声明一个在等号右侧没有任何内容的变量,则必须显式指定类型,即int myNumber
就我个人而言,我只会在很明显它将编译成什么的时候使用var。。。e、 g
var myNumber = 1;
var name = "some name";
var lst = List<int>();
当然,您可以转到该方法来查看返回值是什么,但对于其他开发人员来说,它可能更难读取。var将C#中的任何类型化名,其类型将由C#编译器确定,或者是隐式类型
但是在
x = 12;
您必须明确地确定类型,例如写:
int x= 12;
使用var没有性能方面的考虑,您可以自由使用它。右侧的相关列中有十几个或更多的副本。添加外围注释-var
并非纯粹为了方便,不必写出声明类型。添加它的主要原因是,如果没有它,就不可能返回匿名类型。所有其他的原因都是附加的。可读性较差的是调用变量“x”。@christiandev-当你说右边必须有一个值时,这是不正确的。它也可以是另一个变量—编译器能够找出正确类型的任何变量。@csg必须是一个具有类型的表达式。该表达式的类型将“而不是”使用var
@siride,我只使用x表示变量名,但我永远不会使用x。为了清晰起见,我将进行编辑。@csg,我想你明白我的意思了吗?这是正确的吗?var x=10;x=“我是字符串”;我无法将int修改为string。因为var是动态类型,对吗?@SivaRajini在编译时,当编译器遇到var x=10
时,它将Int
数据类型分配给它,结果datataypwe发生了变化。。。。。现在,此后x
保存的任何值都将是且仅为Int
x = 12;
int x= 12;