使用未赋值的局部变量 c# 错误
本文关键字:局部变量 错误 赋值 | 更新日期: 2023-09-27 17:59:21
如下,当我调试时,它给了我错误: 错误 1 使用未赋值的局部变量 'moneyBet'我不确定以下代码有什么问题。我以前从未得到过这样的东西。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyNotSoVeryFirstApplication
{
class Program
{
static void Main(string[] args)
{
bool stillGoing = true;
int moneyBet;
int moneyInBank = 0; //change 0 to amount held in actuality
while (stillGoing == true)
{
Console.WriteLine("Money in bank : {0}", moneyInBank);
Console.WriteLine("----------------------------------------------------");
Console.Write("Enter amount you would like to bet: ");
string moneybetString = Console.ReadLine();
try
{
moneyBet = Convert.ToInt32(moneybetString);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
catch (OverflowException e)
{
Console.WriteLine(e.Message);
}
finally
{
if (moneyBet > Int32.MaxValue)
Console.WriteLine("You are about to bet {0}. Are you sure you want to bet this amount?", moneyBet);
}
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
该行之前,您需要明确分配moneyBet
:
if (moneyBet > Int32.MaxValue)
如果Convert.ToInt32(moneybetString);
引发异常,则不会分配该异常。
该规范描述了 try/finally 块中明确赋值的规则:
5.3.3.14 最终尝试语句
对于表单的 try 语句 stmt:最后尝试尝试块最终块
• 最终块开头 v 的确定赋值状态 与 V 开头的确定赋值状态相同 标准时间。
moneybetString
在 try 块之前没有明确分配,因此在读取它的 finally 块的开头没有明确分配。
最简单的解决方案是在声明点分配一个初始值:
int moneyBet = 0;
另请注意,您的条件将始终为假,因为moneyBet
是一个整数,不能超过 int.MaxValue
。
都会调用Finally
。因此,如果存在异常,moneyBit
仍会在该if
语句中调用。因此,您会收到一个分配错误,因为它从未被分配(异常由 Convert.ToInt32(moneybetString)
引发(。
要么在声明它时需要为其赋值,要么使用 Int32.TryParse
.
try块中分配moneyBet
,但如果这引发异常,你就是在final块中使用未赋值的变量。只需将int moneyBet;
更改为int moneyBet = 0;
即可
尝试int moneyBet=0;
在您的代码中,如果 try 块失败,则在 finally 块中,moneyBet
将保持未分配状态。
当您声明变量 moneyBet 时,如果在 Convert.ToInt32 期间抛出异常,moneyBet 将保持未分配状态,因为捕获块中没有发生分配,因此当您到达最终块时,moneyBet 是未分配的。