8

我经常必须转换一个检索到的值(通常作为一个字符串) - 然后将它转换为一个 int。但是在 C# (.Net) 中,您必须选择 int16、int32 或 int64 - 当您不知道检索到的数字有多大时,您怎么知道该选择哪一个?

4

6 回答 6

21

这里提到声明 Int16 保存 ram 的每个人都应该投反对票。

您的问题的答案是使用关键字“int”(或者如果您愿意,请使用“Int32”)。

这为您提供了多达 24 亿个数字的范围……此外,32 位处理器将更好地处理这些整数……而且(也是最重要的原因)是,如果您打算出于任何原因使用该整数……它可能需要是一个“int”(Int32)。

在 .Net 框架中,99.999% 的数字字段(即整数)是“整数”(Int32)。

示例:Array.Length、Process.ID、Windows.Width、Button.Height 等 100 万次。

编辑:我意识到我的脾气暴躁会让我投票失败......但这是正确的答案。

于 2008-11-06T21:16:02.410 回答
9

只是想补充一点……我记得在 .NET 1.1 时代,编译器已经过优化,因此“int”操作实际上比字节或短操作更快。

我相信它今天仍然有效,但我现在正在进行一些测试。


编辑:我有一个惊喜发现:short(s) 的加法、减法和乘法运算实际上返回 int!

于 2008-11-06T21:12:55.630 回答
3

反复尝试 TryParse() 没有意义,您已经声明了一个字段。除非您将该字段设置为 Object 类型,否则您无法改变主意。不是一个好主意。

该字段表示的任何数据都具有物理意义。这是一个年龄、一个大小、一个计数等。物理量对其范围有实际的限制。选择可以存储该范围的 int 类型。不要试图修复溢出,这将是一个错误。

于 2008-11-06T21:17:47.553 回答
1

与当前最流行的答案相反,较短的整数(如 Int16 和 SByte)通常比较大的整数(如 Int32 和 Int64)占用更少的内存空间。您可以通过实例化 sbyte/short/int/long 的大型数组并使用 perfmon 测量托管堆大小来轻松验证这一点。确实,许多 CLR 风格会在对它们进行算术运算时为特定于 CPU 的优化扩展这些整数,但是当作为对象的一部分存储时,它们只占用必要的内存。

因此,您绝对应该考虑大小,特别是如果您将使用大型整数列表(或使用包含整数字段的大型对象列表)。您还应该考虑诸如 CLS-compliance 之类的事情(它不允许公共成员中有任何无符号整数)。

对于像将字符串转换为整数这样的简单情况,我同意 Int32 (C# int) 通常最有意义,并且可能是其他程序员所期望的。

于 2008-11-07T19:04:38.573 回答
0

如果我们只是在谈论几个数字,那么选择最大的不会对您的整体 ram 使用产生显着影响,并且会起作用。如果你在谈论很多数字,你需要对它们使用 TryParse() 并找出最小的 int 类型,以节省 ram。

于 2008-11-06T21:03:21.827 回答
0

所有计算机都是有限的。您需要根据您认为用户的需求来定义上限。

如果您确实没有上限并且希望允许“无限”值,请尝试将 .Net Java 运行时库添加到您的项目中,这将允许您使用 java.math.BigInteger 类 - 它在几乎无限大小上进行数学运算整数。

注意:.Net Java 库带有完整的 DevStudio,但我不认为它们带有 Express。

于 2008-11-06T21:06:07.827 回答