2

在c#中,返回值时,不需要指定变量类型。例如:

foreach(var variable in variables) {
}

我正在构建一个企业软件,今天它是一个小型解决方案,但它会变得很大。当我们在应用程序上反复使用此语言功能时,它会降低性能吗?

我还没有找到这个功能是如何调用的,我想了解更多关于它的信息,它是如何调用的?

4

3 回答 3

13

var用于implicitly typing变量。

它发生在编译时。没有性能问题。

例子:

var i = 12; // This will be compiled as an integer
var s = "Implicitly typed!"; // This will be compiled as a string
var l = new List<string>(); // This will be compiled as a List of strings
于 2013-01-27T10:38:54.863 回答
5

Var是一个implicit type。它为 C# 编程语言中的任何类型起别名。别名类型由 C# 编译器确定。这没有性能损失。var关键字具有同等效果。它不会影响运行时行为。

var i = 5; // i is compiled as an int
var i = "5" ; // i is compiled as a string 
var i = new[] { 0, 1, 2 }; // i is compiled as an int[] 
var i = new[] { "0", "1", "2" }; // i is compiled as an string[] 
var i = new { Name = "Soner", Age = 24 }; // i is compiled as an anonymous type 
var i = new List<int>(); // i is compiled as List<int>

var关键字也有一些限制。您不能将 a 分配varnull。您也不能var用作参数类型或方法的返回值

从 签出MSDN

于 2013-01-27T10:40:46.553 回答
2

如前所述varis an implicit type,编译器会计算出应该是compile-time什么类型。var没有性能问题。你可以编写一些测试代码,编译,并使用ildasm.exe来检查生成的CIL

MSDN - 查看程序集内容


例子

注意:int 声明与 IL 中的 var 声明相同。所以执行引擎不知道你使用了var。

并且:它们被编译为相同的 IL。var 关键字与 int 或 string 等显式类型一样快。

使用 var [C#] 的中间语言方法

> public int ReturnValue() {
>     var a = 5;
>     int b = 5;
> 
>     return a + b; }

方法的 IL

.method public hidebysig instance int32  ReturnValue() cil managed
{
  // Code size       9 (0x9)
  .maxstack  1
  .locals init ([0] int32 result,
       [1] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldc.i4.5
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  stloc.1
  IL_0005:  br.s       IL_0007
  IL_0007:  ldloc.1
  IL_0008:  ret
} // end of method VarKW::ReturnValue
于 2013-01-27T10:52:29.050 回答