c# - 在声明点使用变量作为输出参数

标签 c# language-lawyer out

当读取 comment 时对于一个答案,我看到了以下构造来声明和初始化变量:

int variable = int.TryParse(stringValue, out variable) ? variable : 0;

这在 C# 中是否被允许、正确且定义明确? 引擎盖下发生了什么?会发生以下情况吗?

  1. 变量是否首先初始化为零?
  2. 然后传递给 int.TryParse(它赋值)?
  3. 然后可选地读取(如果 int.TryParse 返回 true)?
  4. 然后,再次分配/初始化?

最佳答案

是的,你适合处决。您还可以查看此处生成的 MSIL

C#代码

 string stringValue = "5";
 int variable = int.TryParse(stringValue, out variable) ? variable : 0;

MSIL 生成

1.  IL_0000:  nop    
2.  IL_0001:  ldstr      "5" // load string
3.  IL_0006:  stloc.0
4.  IL_0007:  ldloc.0
5.  IL_0008:  ldloca.s   variable
6.  IL_000a:  call       bool [mscorlib]System.Int32::TryParse(string, int32&)
7.  IL_000f:  brtrue.s   IL_0014
8.  IL_0011:  ldc.i4.0
9.  IL_0012:  br.s       IL_0015
10. IL_0014:  ldloc.1
11. IL_0015:  stloc.1
12. IL_0016:  ret

这阐明了它在幕后所做的事情。

语句 5 将变量分配到堆栈上。 语句 6 正在调用该方法。 语句 7、8、9 实际上是在执行 bool 表达式。

关于c# - 在声明点使用变量作为输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32497023/

相关文章:

c++ - 零初始化、未命名、临时无符号整数

rust - Rust的确切自动引用规则是什么?

audio - 更改 Flash Player 音频输出设备

c# - 具有返回值和输出参数的 Python NET 调用 C# 方法

c# - 图像未在 asp webapp 中解析 (c#)

c# - 在应用程序变量中存储用户详细信息

java - 构造函数引用 - 创建泛型数组时没有警告

c# - dotnet Entity Framework 和mysql集群

c# - 如何使用 Rx 监控项目文件和文件的外部更改?

android - 如何判断蓝牙是否已连接?