字符串无法解析为UInt32

时间:2019-03-02 22:44:49

标签: c# unity3d

我正在为Unity中的用户编写一个Login。我有2个“ Text Mesh Pro UGUI”输入字段,用于输入用户名和密码。

我需要将用户名(数字)转换为UInt32来处理用户的登录。

但是这个简单的字符串有一个问题→UInt32解析。

这是代码:

// Note: I have tried typing different Numbers into the input field but in this case, 
// I have tried the same as the test_string (123456)

// This works perfect
string test_string = "123456";

UInt32 test_UInt32 = 0;

if (UInt32.TryParse(test_string, out test_UInt32))
{
    test_UInt32 = UInt32.Parse(test_string);
}

// This never works
UInt32 username_UInt32 = 0;

if (UInt32.TryParse(username.text, out username_UInt32))
{
    username_UInt32 = UInt32.Parse(username.text);
}

// Debugging for me to find the error
Debug.Log(username.text); // Output: 123456
Debug.Log(test_string);   // Output: 123456

Debug.Log(username.text.GetType().ToString());   // Output: System.String
Debug.Log(test_string.GetType().ToString());     // Output: System.String

Debug.Log(username.text.Length.ToString());      // Output: 7
Debug.Log(test_string.Length.ToString());        // Output: 6

// For Testing only => FormatException: Input string was not in a correct format.
username_UInt32 = UInt32.Parse(username.text);

4 个答案:

答案 0 :(得分:1)

看你的长度不一样。您缺少需要调试的东西

  Debug.Log(username.text.Length.ToString());      // Output: 7
  Debug.Log(test_string.Length.ToString());        // Output: 6

UInt32.Parse仅方法将数字的字符串表示形式转换为其等效的32位无符号整数。必须有一个特殊的字符。空格可以出现在开头和结尾,但不能出现在它们之间。

答案 1 :(得分:0)

username.text中可能存在空格字符 您可以使用此代码删除空格

username.text = username.text.Trim();

然后解析它。

,当您使用TryParse方法时,无需再次使用Parse。只需将代码更改为此

if (!UInt32.TryParse(username.text, out username_UInt32))
{
    //handle error
}

答案 2 :(得分:0)

非常感谢所有这些输入,它现在正在按预期运行!

您是对的,有一个隐藏的角色。

这解决了问题:

string clean_string = username.text.Replace("\u200B", "")

使用此清理后的字符串,解析可以完美地进行。

您保存了我的一天。祝你一切顺利!

答案 3 :(得分:0)

您没有意识到.TryParse()不仅会告诉您解析是否成功,还会用新的数字填充out参数。您一直在尝试为该参数分配一个值。

    private void button2_Click(object sender, EventArgs e)
    {
        string test_string = textBox1.Text.Trim();
        if (!uint.TryParse(test_string, out uint test_UInt32))
        {
            MessageBox.Show("Invalid Input");
            return;
        }
        if (!UInt32.TryParse(textBox1.Text.Trim(), out uint username_UInt32))
        {
            MessageBox.Show("Invalid Input");
            return;
        }
        Debug.Print($"The input string is {test_string}, the resulting number is {test_UInt32}, of type {test_UInt32.GetType()}");
        //Output  The input string is 1234, the resulting number is 1234, of type System.UInt32
        Debug.Print($"The input string is {textBox1.Text}, the resulting number is {username_UInt32}, of type {username_UInt32.GetType()}");
        //Output  The input string is 1234, the resulting number is 1234, of type System.UInt32
    }