我正在为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);
答案 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
}