原文: http://www.cnblogs.com/hbifts/archive/2004/06/14/15732.aspx

注:原文中的链接请直接去上述地址查看.

在siko的帖子:c#初学者,望指教 中,他提到了一个问题,
  string s = Console.ReadLine();
  int a = int.Parse(s);

对于上述代码,怎么很方便的检测输入的为Int型,而且性能不能影响很大.

我在评论中给出的一个方案就是,使用Try catch

int x; 
while(true){ 

try{ 
x = Int32.Parse(..); 
break; 

catch(Exception ex){ 
Console.WriteLine(...); 



但是dudu发现,这样做很影响性能.而性能的影响都是由于转换不成功,Throw 的Exception引起的.(由sumtec解释)
而且sumtec也提出了一种解决方案:
s = s.Trim(); 
switch (s[0]) 

  case '1': 
   ... 
   break; 
  case '2': 
   ... 
   break; 
  case '3': 
   ... 
   break; 
  default: 
   ... 
   break; 


或者: 
s = s.Trim(); 
byte b = Encoding.Ascii.GetByte(s[0]); 
switch(b - 0x30) 

  case 1: 
    ... 
  .... 



上述代码应该是可以完成了siko的问题了的.
但是我始终觉得这样做太,,,,厄,怎么说呢,麻烦?还是别的..
反正就是和本来的意图不相同了吧..

其实此问题的主要原因在于,确定用户输入的字符串为0-9的数字,不是字母.
这时,我们就可以通过正则表达式来对输入进行验证:)
代码如下:

   string regx = @"^\d+$";
   string temp;
   Regex reg = new Regex(regx );
   while(true){
    temp = Console.ReadLine();
    Console.WriteLine("input : " + temp);
    if( reg.IsMatch(temp) ){
     break;
    }
   }
   Console.WriteLine("hehe");
   int x = Int32.Parse(temp);
   Console.WriteLine(x);

这样,就可以很方便的检测输入的是不是数字了.呵呵...
posted on 2004-06-15 00:07  fenix  阅读(296)  评论(0)    收藏  举报