C# 尝试使用TryParse helper方法在C中解析字符串
我正试图将用户输入的文本解析成一个浮点,这样我就可以对结果执行一些可怕的数学运算。结果是结尾处的numberA变量。这就是我将字符串解析为浮点的方式:C# 尝试使用TryParse helper方法在C中解析字符串,c#,string,parsing,boolean,tryparse,C#,String,Parsing,Boolean,Tryparse,我正试图将用户输入的文本解析成一个浮点,这样我就可以对结果执行一些可怕的数学运算。结果是结尾处的numberA变量。这就是我将字符串解析为浮点的方式: numberAString = GUI.TextField(new Rect(25, 100, 100, 25), numberAString.ToString()); bool ParsableCheckA = float.TryParse(numberAString, out numberA); 我最终用另一个浮点数乘以numberA。我正
numberAString = GUI.TextField(new Rect(25, 100, 100, 25), numberAString.ToString());
bool ParsableCheckA = float.TryParse(numberAString, out numberA);
我最终用另一个浮点数乘以numberA。我正在处理稍后不会用简单错误消息解析的文本。让我烦恼的两件事:
1为什么我需要在TryParse参数中使用numberString而不是它的值?为什么我不能直接把GUI.Textfield等放进那个插槽?为什么我需要在两行代码中分解这些内容
我得到一个警告,说我从未使用过ParsableCheckA,这是真的。但是如果没有它,我似乎不能使用那个Tryparse助手,不是吗?有没有一种方法可以消除对那个bool的需求?谢谢。TryParse Metod,它的用法非常严格,如下例所示:
double _dblOriginal;
_dblOriginal=3.141592;
string _str;
_str = _dblOriginal.ToString();
double _dblParsed;
bool _parseOK= TryParse(_str, out dblParsed);
详情请参阅:
注意:在您的示例中,确保传递给TryParse方法的字符串numberString包含有效的数字
另外,仅供参考:TryParse方法与仅解析方法相比有一些性能优势,因为如果解析失败,它不会引发异常,而只是检查bool结果值
希望这会有所帮助。关于,1 numberString是一个字符串,因此您可以在TryParse调用中直接使用它。
2 TryParse设计用于返回布尔值,以便您可以检查错误并采取措施。但是,不需要指定返回值。您可以这样使用它,只需接受指定给out参数的默认值0.0:
float.TryParse(numberAString, out numberA);
在这种情况下,您将无法区分无效条目和正确解析为零的值。我个人创建了一个用于简化数字解析的。如果性能非常关键,那么这可能不是一个好主意,因为对于有效的浮动,您实际上需要将它们转换两次。但我不认为这对性能的影响可以忽略不计
public static class NumberExtensions
{
//Test if the text represents a valid float.
public static bool IsFloat(this string text)
{
float dummy = 0;
return Float.TryParse(text, out dummy);
}
//Convert the text to a float. Will throw exception if it's not a valid float.
public static float ToFloat(this string text)
{
float number = Float.Parse(text);
return number;
}
}
用法
string text = "123";
if(text.IsFloat())
{
//text must be a valid float
float myfloat = text.ToFloat();
}
else
{
//text isn't a valid float
}
你必须记住通过调用IsFloat扩展方法来测试它是否是一个float,但是我更容易从概念上这样考虑它,而不是使用out变量,后者。对于你的第二个问题,你可以使用float.TryParsenumberAString,out numberA;并忽略返回值。对于你的第一个问题,我不知道你在问什么。不,你不应该这样做。2你之所以这么做是因为你可以测试成功,而不是去尝试/抓住。换句话说,你要确保它是一个数字,并且正确解析了。哈比卜,你是对的。我一定错过了我可以使用float.TryParse方法的机会。我想我已经试过了,但我想我没有正确设置。我的第一个问题,nm。我想出来了。语法错误。好的,我又看了一眼我想做的事情,现在我看得更清楚了。谢谢