C# 尝试使用TryParse helper方法在C中解析字符串

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。我正

我正试图将用户输入的文本解析成一个浮点,这样我就可以对结果执行一些可怕的数学运算。结果是结尾处的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。我想出来了。语法错误。好的,我又看了一眼我想做的事情,现在我看得更清楚了。谢谢