我们有从数据库中的Sequence创建的引用值,这意味着它们都是整数。 (这是不可想象的 - 尽管不太可能 - 他们将来可能会改变以包括字母,例如R12345。)
在我们的[C#]代码中,是应该将它们输入为字符串还是整数?
对这些值执行任何算术(例如将它们加在一起)没有意义这一事实是否意味着它们应被视为字符串文字?如果没有,并且它们应该被输入为整数(/ longs),那么这背后的基本原理/原因是什么?
我已经搜索了这个问题的答案,但无法在Google或StackOverflow上找到任何内容,因此非常感谢您的投入。
答案 0 :(得分:9)
还有其他一些差异:
领先的零点:
你需要考虑这些吗?如果你有一个ID字符串,则需要
<强>分拣:强>
排序顺序因类型而异:
Integer:
1
2
3
10
100
String
1
10
100
2
3
那么你是否需要按顺序排列序列(或者两种方式)?
相同的参数也适用于您在DB本身中应用的输入,因为其中的要求可能相同。理想情况下,克里斯说,他们应该保持一致。
答案 1 :(得分:3)
以下是需要考虑的一些事项:
010
与10
不同。如果是,请使用string
。200
之前或之后应该30
排序?int
。int
s为4个字节,string
s,每个字符至少1个字节。int
会提供足够的唯一值吗?字符串可以支持可能无限制的唯一值。R13_55
显然是错误的,但是{ {1}}?)答案 2 :(得分:2)
根据您描述的声音,这些是当前恰好由一系列数字表示的值;它们本身并不是数字。顺便说一下,这就像我的电话号码:它不是一个数字,而是一组数字。
而且,就像我的电话号码一样,我建议将其存储为字符串。前导零似乎不是一个问题,但考虑到你将它们视为字符串,你也可以存储它们并为自己提供未来的灵活性。 / p>
答案 3 :(得分:2)
它们应该作为整数输入,原因很简单:尽可能保留相同的类型定义,以避免类型转换的开销或意外的副作用。
答案 4 :(得分:0)
有充分的理由不在代码中使用int
,string
,long
等使用类型。在其他问题中,这允许像
并传达非常少的信息:给定int id
,这是指什么表,它表示什么样的实体?您需要在参数/变量/字段/方法名称中对此进行编码,编译器将无法帮助您。
由于这些值可能总是整数,因此使用整数类型应该更有效并且减少GC的负担。但是为了防止上述错误,您可以使用包含单个字段的(不可变的)struct
。它不需要支持除了构造函数和id的getter之外的任何东西,这足以解决上述问题,除了需要密钥的实际值的少量代码(例如,构建查询)。
也就是说,使用正确的ORM也可以解决这些问题,而且工作量较少。他们有自己的缺点,但他们真的没那么糟糕。
答案 5 :(得分:0)
如果您不需要对序列执行某些数学计算,则可以轻松选择字符串。
但是考虑排序:整数和字符串之间的生成顺序会有所不同,例如: 1, 2, 10
表示整数,1, 10, 2
表示字符串。