如何验证空输入

时间:2012-03-05 18:39:02

标签: c# validation

我遇到的问题是验证输入是否意味着将它放入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

3 个答案:

答案 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");
}