【发布时间】:2010-01-29 21:55:11
【问题描述】:
我正在尝试存储一个可变长度数字,该数字可以有前导零作为该数字的一部分。
.NET 框架中是否有一个类能够存储这样的值不会丢失前导零的信息,并且可以超过上长的限制?
我目前将它们存储在这样的类中,如果 BCL 中没有可用的结构或类,有什么方法可以更好地编写这个类:
[Serializable]
public class Number
{
public int[] Array { get; set; }
public int Length { get { return Array.Length; } }
public Number(string number)
{
Array = new int[number.Length];
for (int i = 0; i < number.Length; i++)
{
Array[i] = Convert.ToInt32(number[i].ToString());
}
}
public Number(int[] array)
{
Array = array;
}
public int ToInt()
{
return Convert.ToInt32(ToString());
}
public override string ToString()
{
StringBuilder sb = new StringBuilder(Array.Length);
foreach (int i in Array)
sb.Append(i);
return sb.ToString();
}
}
将其用作结构的能力将非常有用,并且能够轻松检查相等性。
粗体/斜体的项目是此类的要求。
【问题讨论】:
-
你不想要一个字符串吗?我看不到数字运算...
-
如果你真的想要超过
long类型上限的东西,你需要重新考虑你的ToInt方法。 -
基本上是的,但是我想在类/结构级别强制无法使用非数字数据,并在代码中使用它的任何地方都明确表示这是意图。跨度>
-
好点 Dan,但是添加它是为了支持一些存储为字符串并转换为 int 的值。绝对是凌乱的做事方式。 +1 指出这一点,需要在代码中添加注释警告。
-
为什么需要前导数字?这是一个什么样的“数字”?我用引号说“数字”,因为在我看来,您真正存储的是代码,例如 SSN 或邮政编码或其他任何东西,实际上不是数字。它碰巧只被允许有数字并不会使它不再是一个代码。存储代码的正常方式是通过字符串。
标签: .net numbers base-class-library