当读取 comment 时对于一个答案,我看到了以下构造来声明和初始化变量:
int variable = int.TryParse(stringValue, out variable) ? variable : 0;
这在 C# 中是否被允许、正确且定义明确? 引擎盖下发生了什么?会发生以下情况吗?
变量
是否首先初始化为零?- 然后传递给
int.TryParse
(它赋值)? - 然后可选地读取(如果
int.TryParse
返回true
)? - 然后,再次分配/初始化?
最佳答案
是的,你适合处决。您还可以查看此处生成的 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/