gpt4 book ai didi

c# - 几次未分配的局部变量?

转载 作者:行者123 更新时间:2023-11-30 21:22:29 24 4
gpt4 key购买 nike

我有下一个代码:

  static void Main(string[] args)
{
byte currency;
decimal amount;
if (Byte.TryParse("string1", out currency) && Decimal.TryParse("string2", out amount))
{
Check(currency, amount);
}
Check(currency, amount); // error's here
}

static void Check(byte b, decimal d) { }

并得到下一个错误:

Use of unassigned local variable 'amount'

为什么我会得到它而且这是合法的,为什么只有 amount?为什么在这种情况下分配了 currency 而不是 amount

最佳答案

看看这一行(我把它分成两行):

if (Byte.TryParse("string1", out currency) &&
Decimal.TryParse("string2", out amount))

&& 运算符是一个短路 评估,这意味着如果第一个Byte.TryParse 不成功,那么第二个Decimal.TryParse 永远不会被执行。

currency 将始终被分配,因为 TryParse 在解析失败时将 out currency ref 设置为默认值。但是,在这种情况下,amount 仍将是未定义的。就好像你写了这样的代码:

if (Byte.TryParse("string1", out currency))
{
if (Decimal.TryParse("string2", out amount))
{
Check(currency, amount);
}
}
Check(currency, amount);

这应该使发生的事情更加明显。第一个 if 语句中的部分总是被执行并为 currency 赋值。 second 中的部分,嵌套的 if 语句只有在第一个成功时才会执行。否则,当您点击第二个 Check 时,amount 将没有任何值(value)。

如果在 currency 无法解析的情况下要使用默认值,则只需将局部变量初始化为默认值即可:

byte currency = 0;
decimal amount = 0;
if (Byte.TryParse("string1", out currency) &&
Decimal.TryParse("string2", out amount))
{
// Etc.

或者您可以像@Martin 所说的那样简单地解析它们。

关于c# - 几次未分配的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com