在c#中将字符串转换为int错误

时间:2016-06-14 13:59:44

标签: c# string integer

您好我正在尝试将String转换为Integer。

下面的代码显示了我尝试将字符串转换为整数的部分。

if (other.gameObject.CompareTag("PickUp"))
{
    if ( checkpointboolean == false)
    {
        string pickupName = other.ToString(); //other = Pickup4
        //Remove first 6 letters thus remaining with '4'
        string y = pickupName.Substring(6); 
        print(y); // 4 is being printed
        int x = 0;
        int.TryParse(y, out x);
        print (x); // 0 is being printed

我也尝试了以下代码而不是'0'我收到以下错误:

if (other.gameObject.CompareTag("PickUp"))
{
    if ( checkpointboolean == false)
    {
        //Get Object name ex: Pickup4
        string pickupName = other.ToString();
        //Remove first 6 letters thus remaining with '4'
        string y = pickupName.Substring(6); 
        print(y);
        int x = int.Parse(y);
  

FormatException:输入字符串的格式不正确   System.Int32.Parse(System.String s)

3 个答案:

答案 0 :(得分:1)

int.TryParse返回一个布尔值,如果成功则返回true,否则返回false。您需要将其包装在if块中并使用该逻辑执行某些操作。

if(int.TryParse(y, out x))
    print (x); // y was able to be converted to an int
else
    // inform the caller that y was not numeric, your conversion to number failed

至于为什么你的号码没有被转换,我不能说直到你发布字符串值是什么。

答案 1 :(得分:0)

对于这种情况,您的第一次尝试是最好的,代码工作正常,int.TryParse() 0提供给out参数并返回false 表示转换失败。输入字符串格式不正确/无法转换为整数。您可以使用int.TryParse()的返回值来检查这一点。为此,您需要做的是: -

 if(int.TryParse(y, out x))
     print (x); // 
 else
     print ("Invalid input - Conversion failed");

答案 2 :(得分:0)

首先,ToString()通常用于调试目的,因此无法保证

 other.ToString()

将在下一版软件中返回预期的"Pickup4"。你可能想要像

这样的东西
  int x = other.gameObject.SomeProperty;
  int x = other.SomeOtherProperty;
  int x = other.ComputePickUp();
  ...

但是,如果您坚持使用.ToString()而不是硬编码六个字母(原因相同:调试信息倾向于从版本更改为版本),但使用正则表达式或其他:

  var match = Regex.Match(other.ToString(), "-?[0-9]+");

  if (match.Success) {
    int value; 

    if (int.TryParse(match.Value, out value))
      print(value); 
    else
      print(match.Value + " is not an integer value"); 
  }
  else
    print("Unexpected value: " + other.ToString());