C# int.TryParse实际上是如何工作的
我已经寻找了C# int.TryParse实际上是如何工作的,c#,C#,我已经寻找了int.TryParse方法实现,它实际上是如何工作的,但我还没有找到。我必须知道,关于字符串,它是否是数值,但我现在不想转换它 因此,我只需要int.TryParse的bool结果。因此,问题是: 是否有任何函数只能提供bool结果 及 我想知道,int.TryParse实际上是如何工作的(是否有try…catch或迭代输入string的字符) 如果只需要bool结果,只需使用返回值并忽略out参数即可 bool successfullyParsed = int.TryParse(
int.TryParse
方法实现,它实际上是如何工作的,但我还没有找到。我必须知道,关于字符串
,它是否是数值,但我现在不想转换它
因此,我只需要int.TryParse
的bool
结果。因此,问题是:
bool
结果int.TryParse
实际上是如何工作的(是否有try…catch
或迭代输入string
的字符)如果只需要
bool
结果,只需使用返回值并忽略out
参数即可
bool successfullyParsed = int.TryParse(str, out ignoreMe);
if (successfullyParsed){
// ...
}
编辑:同时,您还可以查看:
如果我想知道一些东西是如何实际实现的,我将使用它来反编译.NET代码 结果是:
// int
/// <summary>Converts the string representation of a number to its 32-bit signed integer equivalent. A return value indicates whether the operation succeeded.</summary>
/// <returns>true if s was converted successfully; otherwise, false.</returns>
/// <param name="s">A string containing a number to convert. </param>
/// <param name="result">When this method returns, contains the 32-bit signed integer value equivalent to the number contained in s, if the conversion succeeded, or zero if the conversion failed. The conversion fails if the s parameter is null, is not of the correct format, or represents a number less than <see cref="F:System.Int32.MinValue"></see> or greater than <see cref="F:System.Int32.MaxValue"></see>. This parameter is passed uninitialized. </param>
/// <filterpriority>1</filterpriority>
public static bool TryParse(string s, out int result)
{
return Number.TryParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out result);
}
// System.Number
internal unsafe static bool TryParseInt32(string s, NumberStyles style, NumberFormatInfo info, out int result)
{
byte* stackBuffer = stackalloc byte[1 * 114 / 1];
Number.NumberBuffer numberBuffer = new Number.NumberBuffer(stackBuffer);
result = 0;
if (!Number.TryStringToNumber(s, style, ref numberBuffer, info, false))
{
return false;
}
if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
{
if (!Number.HexNumberToInt32(ref numberBuffer, ref result))
{
return false;
}
}
else
{
if (!Number.NumberToInt32(ref numberBuffer, ref result))
{
return false;
}
}
return true;
}
仅仅因为
int.TryParse
给了你这个值并不意味着你需要保留它;您可以很高兴地这样做:
int temp;
if (int.TryParse(inputString, out temp))
{
// do stuff
}
如果不需要,可以完全忽略temp
。如果你真的需要它,那么它会在你想要的时候等着你
至于内部,据我记忆所及,它试图将字符串的原始字节作为int读取,并测试结果是否有效,或者其他什么;它不像遍历非数字字符那样简单。Regex是编译的,因此为了提高速度,只需创建一次并重用它。
新的比iMatch需要更长的时间。
这只检查所有数字。
它不检查范围。
如果您需要测试范围,那么TryParse是一个不错的选择
private static Regex regexInt = new Regex("^\\d+$");
static bool CheckReg(string value)
{
return regexInt.IsMatch(value);
}
检查此简单程序以了解
int.TryParse
class Program
{
static void Main()
{
string str = "7788";
int num1;
bool n = int.TryParse(str, out num1);
Console.WriteLine(num1);
Console.ReadLine();
}
}
输出为:7788TryParse是单行解析或验证的最佳方式:
int nNumber = int.TryParse("InputString", out nNumber) ? nNumber : 1;
简要说明:
if (int.TryParse(inputString, out _))
{
//do stuff
}
1.不,没有。您可以使用
Convert.ToInt32()
,但如果无法解析字符串,它将引发异常。2.它必须遍历字符串,但可能不会捕获任何异常,因为它比从Convert.ToInt32()捕获异常要快。
您可以使用regex^\d+$。或者为IsDigit计算每个字符。它比我想的更复杂:)谢谢在声明局部变量“nCurPage”之前不能使用它
亲爱的devin burke,你说得对,但它可以工作。我多次使用它,没有任何错误或警告…这不是为了回答问题。out做什么?@mrid它指定调用范围中的一个变量被赋予具有写访问权限的方法范围。例如,如果一个变量int-someInt
被传递给int.TryParse
比如int.TryParse(out-someInt)
,int.TryParse
可以将其输出放在someInt
中,即使它通常不在范围内。@themefield-它在文章正文中正确地回答了这个问题:“所以问题是:1)是否有任何函数只能提供布尔结果”。
if (int.TryParse(inputString, out _))
{
//do stuff
}