2016-03-05 116 views
0

我似乎无法找到答案在任何地方在线我的问题。从专门的TryParse方法返回值c#

我想写一个Int.TryParse方法在一个单独的类,它可以在用户进行输入时调用。因此,而不是写这个,每次有一个输入:

int z; 
    int.TryParse(Console.writeLine(), out z); 

我试着去做到这一点(从主法)

int z; 
Console.WriteLine("What alternative?"); 
Try.Input(Console.ReadLine(), z); // sends the input to my TryParse method 

的的TryParse方法

class Try 
    { 

    public static void Input(string s, int parsed) 
    { 
     bool Converted = int.TryParse(s, out parsed); 

     if (Converted)  // Converted = true 
     { 
      return;     
     } 
     else    //converted = false 
     { 
      Console.Clear(); 
      Console.WriteLine("\n{0}: Is not a number.\n\nPress ENTER to return", s); 
      Console.ReadLine(); 
      return; 
     } 
    }  

    } 

} 

为什么我的当程序返回值时,Variabel“z”是否得到“parsed”的值?

回答

1

为了在parsed价值传达给调用方法,你要么需要return,或使其可作为out参数,如int.TryParse()一样。

返回值是最直接的方法,但它不提供方法来知道解析是否成功。但是,如果将返回类型更改为Nullable<int>(又名int?),则可以使用空返回值指示失败。

public static int? Input(string s) 
{ 
    int parsed; 
    bool Converted = int.TryParse(s, out parsed); 

    if (Converted)  // Converted = true 
    { 
     return null;     
    } 
    else    //converted = false 
    { 
     Console.Clear(); 
     Console.WriteLine("\n{0}: Is not a number.\n\nPress ENTER to return", s); 
     Console.ReadLine(); 
     return parsed; 
    } 
}  


Console.WriteLine("What alternative?"); 
int? result = Try.Input(Console.ReadLine()); 
if(result == null) 
{ 
    return; 
} 
// otherwise, do something with result.Value 

使用一个out参数将镜像int.TryParse()方法签名:

public static bool Input(string s, out int parsed) 
{ 
    bool Converted = int.TryParse(s, out parsed); 

    if (Converted)  // Converted = true 
    { 
     return false;     
    } 
    else    //converted = false 
    { 
     Console.Clear(); 
     Console.WriteLine("\n{0}: Is not a number.\n\nPress ENTER to return", s); 
     Console.ReadLine(); 
     return true; 
    } 
}  

Console.WriteLine("What alternative?"); 
int z; 
if(!Try.Input(Console.ReadLine(), out z)) 
{ 
    return; 
} 
// otherwise, do something with z