【发布时间】:2010-09-21 04:19:09
【问题描述】:
我经常需要转换一个检索到的值(通常作为一个字符串)——然后将它转换为一个 int。但是在 C# (.Net) 中,您必须选择 int16、int32 或 int64 - 当您不知道检索到的数字有多大时,您怎么知道该选择哪一个?
【问题讨论】:
-
别忘了,如果你不需要负数,c#也有无符号整数(uint32,uint64)。
标签: c# integer typeconverter
我经常需要转换一个检索到的值(通常作为一个字符串)——然后将它转换为一个 int。但是在 C# (.Net) 中,您必须选择 int16、int32 或 int64 - 当您不知道检索到的数字有多大时,您怎么知道该选择哪一个?
【问题讨论】:
标签: c# integer typeconverter
这里提到声明 Int16 保存 ram 的每个人都应该投反对票。
您的问题的答案是使用关键字“int”(或者如果您愿意,可以使用“Int32”)。
这为您提供了多达 24 亿个数字的范围...此外,32 位处理器将更好地处理这些整数...而且(最重要的原因)是,如果您计划几乎出于任何原因使用该 int ......它可能需要是一个“int”(Int32)。
在 .Net 框架中,99.999% 的数字字段(即整数)是“整数”(Int32)。
示例:Array.Length、Process.ID、Windows.Width、Button.Height 等 100 万次。
编辑:我意识到我的脾气暴躁会让我投票失败……但这是正确的答案。
【讨论】:
只是想补充一点...我记得在 .NET 1.1 时代,编译器经过优化,因此 'int' 操作实际上比字节或短操作更快。
我相信它今天仍然有效,但我现在正在运行一些测试。
编辑:我有一个惊喜发现:short(s) 的加法、减法和乘法运算实际上返回 int!
【讨论】:
反复尝试 TryParse() 没有意义,您已经声明了一个字段。除非您将该字段设置为 Object 类型,否则您无法改变主意。不是个好主意。
该字段表示的任何数据都具有物理意义。这是一个年龄、一个大小、一个计数等。物理量对其范围有实际的限制。选择可以存储该范围的 int 类型。不要试图修复溢出,这将是一个错误。
【讨论】:
与当前最流行的答案相反,较短的整数(如 Int16 和 SByte)通常比较大的整数(如 Int32 和 Int64)占用更少的内存空间。您可以通过实例化 sbyte/short/int/long 的大型数组并使用 perfmon 测量托管堆大小来轻松验证这一点。确实,许多 CLR 风格在对它们进行算术运算时会扩展这些整数以进行特定于 CPU 的优化,但是当作为对象的一部分存储时,它们只占用必要的内存。
因此,您绝对应该考虑大小,特别是如果您将使用大型整数列表(或使用包含整数字段的大型对象列表)。您还应该考虑诸如 CLS 合规性(不允许公共成员中存在任何无符号整数)之类的问题。
对于像将字符串转换为整数这样的简单情况,我同意 Int32 (C# int) 通常最有意义,并且可能是其他程序员所期望的。
【讨论】:
如果我们只是谈论几个数字,选择最大的不会对您的整体 ram 使用量产生显着影响,并且会起作用。如果你在谈论很多数字,你需要对它们使用 TryParse() 并找出最小的 int 类型,以节省内存。
【讨论】:
所有计算机都是有限的。您需要根据您认为用户的需求来定义一个上限。
如果您确实没有上限并且想要允许“无限”值,请尝试将 .Net Java 运行时库添加到您的项目中,这将允许您使用 java.math.BigInteger 类 - 它几乎可以进行数学运算- 无限大小的整数。
注意:.Net Java 库带有完整的 DevStudio,但我不认为它们带有 Express。
【讨论】: