尝试在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的需求?谢谢。

尝试在c#中使用TryParse辅助方法解析字符串

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变量容易得多,有些人认为这是一个坏主意。