我遇到的问题是验证输入是否意味着将它放入try catch中,然后我不会通过该变量并且我收到此错误:
使用未分配的局部变量'MainMenuSelection'
我之前已经验证过使用过这种方法,但由于某些原因它现在无法使用,请帮助
//Take the menu selection
try
{
mainMenuSelection = byte.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("Please enter a valid selection");
}
switch (mainMenuSelection) //Where error is shown
答案 0 :(得分:1)
显然,用户可以输入任何不会被解析为单个byte
的内容。尝试使用Byte.TryParse()方法,该方法不会生成异常,只返回状态标志。
如果需要,您可以进一步为用户输入添加更多分析:
// Initialize by a default value to avoid
// "Use of unassigned local variable 'MainMenuSelection'" error
byte mainMenuSelection = 0x00;
string input = Console.ReadLine();
// If acceptable - remove possible spaces at the start and the end of a string
input = input.Trim();
if (input.Lenght > 1)
{
// can you do anything if user entered multiple characters?
}
else
{
if (!byte.TryParse(input, out mainMenuSelection))
{
// parsing error
}
else
{
// ok, do switch
}
}
也许你只需要一个字符而不是一个字节? 然后就做:
// Character with code 0x00 would be a default value.
// and indicate that nothing was read/parsed
string input = Console.ReadLine();
char mainMenuSelection = input.Length > 0 ? input[0] : 0x00;
答案 1 :(得分:1)
更好的方法是使用byte.TryParse()
。它专门针对这些类型的场景而设计。
byte b;
if (byte.TryParse("1", out b))
{
//do something with b
}
else
{
//can't be parsed
}
答案 2 :(得分:0)
如果你只关心输入本身,你可以使用Byte.TryParse Method然后处理假布尔情况。
byte mainMenuSelection;
if (Byte.TryParse(Console.ReadLine(), out mainMenuSelection)
{
switch(mainMenuSelection);
}
else
{
Console.WriteLine("Please enter a valid selection");
}