2012-03-05 97 views
1

我遇到的問題是驗證輸入裝置,把它在一個嘗試捕捉,然後通過不會傳遞變量,我得到這個錯誤:如何驗證一個空的輸入

使用未分配本地的變量「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

可以顯示mainMenuSelection的定義嗎? – BigOmega 2012-03-05 18:42:45

+1

如果沒有指定異常類型,你真的不應該寫'catch'。這是一個壞習慣,遲早會咬你。 – phoog 2012-03-05 18:55:12

回答

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; 
+0

看到更新,答案更新 – sll 2012-03-05 18:56:30

0

如果你只是關注自身的輸入,你可以使用Byte.TryParse Method,然後辦理假布爾情況相反。

byte mainMenuSelection; 
if (Byte.TryParse(Console.ReadLine(), out mainMenuSelection) 
{ 
    switch(mainMenuSelection); 
} 
else 
{ 
    Console.WriteLine("Please enter a valid selection"); 
} 
1

更好的方法是使用byte.TryParse()。它是專門爲這些類型的場景製作的。

byte b; 
if (byte.TryParse("1", out b)) 
{ 
    //do something with b 
} 
else 
{ 
    //can't be parsed 
}