[英]Does int.Parse uses boxing/unboxing or type casting in C#?
当我说的时候会发生什么
int a = int.Parse("100");
在Prse方法中是否有任何拳击/ unboxung或类型转换?
没有拳击或拆箱。 你问来干什么? 解析算法比box / unbox操作昂贵得多,所以即使有一个,你也不会“感觉”到性能差异。
我不相信那里有任何拆箱。 我假设代码使用一个int变量并返回它,因此没有装箱/拆箱。
编辑 :我同意280Z28 。 我只是看了一下代码,它非常复杂。 最终的值没有像我想象的那样装箱,但是有一些冗长的预处理步骤才能到达那里,所以即使装箱也不会有很大的性能变化。
顺便说一句,如果您不知道,可以使用Reflector自己查看代码。
是。 使用Reflector ,您可以准确地看到发生了什么。 我看不到任何拳击,但有一些演员阵容,例如:
private static unsafe void StringToNumber(string str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo info, bool parseDecimal)
{
if (str == null)
{
throw new ArgumentNullException("String");
}
fixed (char* str2 = ((char*) str))
{
char* chPtr = str2;
char* chPtr2 = chPtr;
if (!ParseNumber(ref chPtr2, options, ref number, info, parseDecimal) ||
((((long) ((chPtr2 - chPtr) / 2)) < str.Length) && //cast
!TrailingZeros(str, (int) ((long) ((chPtr2 - chPtr) / 2))))) //cast
{
throw new FormatException(Environment.GetResourceString("Format_InvalidString"));
}
}
}
或者,这发生在循环中:
private static unsafe char* MatchChars(char* p, string str)
{
fixed (char* str2 = ((char*) str)) //cast
{
char* chPtr = str2;
return MatchChars(p, chPtr);
}
}
真正的问题是 - 所以?
添加我的位。
“取消装箱”的术语/技术仅与盒装值类型相关。 因此,如果值类型变量未加框(转换为引用类型),则可以将其取消装箱。
在您的情况下,您具有有效的引用类型值,该值无法取消装箱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.