尝试在c#中使用TryParse辅助方法解析字符串
本文关键字:方法 字符串 TryParse | 更新日期: 2023-09-27 18:13:06
我试图将用户输入的文本解析为浮点数,以便我可以对结果执行一些非常棒的数学运算。结果是末尾的numberA变量。这就是我如何将字符串解析为浮点数:
numberAString = GUI.TextField(new Rect(25, 100, 100, 25), numberAString.ToString());
bool ParsableCheckA = float.TryParse(numberAString, out numberA);
我最终将numberA乘以另一个浮点数。我正在处理的文本将不会解析一个简单的错误消息稍后。有几件事困扰着我:
1)为什么我需要在TryParse参数中使用numberAString而不是它的值?为什么我不能放弃GUI ?Textfield等放到那个槽里?为什么我需要把它分成两行代码呢?
2)我得到一个警告,我从来没有使用ParsableCheckA(这是真的)。但是没有它,我似乎无法使用Tryparse帮助器,不是吗?有没有一种方法可以消除对bool的需求?谢谢。
TryParse()
方法,其用法相当简单,如下例所示:
double _dblOriginal;
_dblOriginal=3.141592;
string _str;
_str = _dblOriginal.ToString();
double _dblParsed;
bool _parseOK= TryParse(_str, out dblParsed);
更多细节见:http://msdn.microsoft.com/en-us/library/system.double.tryparse%28v=vs.110%29.aspx
注意:确保在您的示例中,您传递给TryParse()
方法的字符串numberAString
包含一个有效的数字。
另外,仅供参考:TryParse()
方法与Parse()
方法相比具有一些性能优势,因为如果解析失败,它不会抛出异常(相反,您只需检查bool
结果值)。
希望这将帮助。问候,
(1) numberAString
(参见GUI.TextField) 是字符串,因此您可以直接在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()
扩展方法来测试它是否为浮点数,但对我来说,在概念上像这样考虑它要比使用out变量容易得多,有些人认为这是一个坏主意。