我已经观察了一段时间C#程序员倾向于在任何地方使用int,并且很少使用uint.但我从来没有找到一个令人满意的答案为什么.
如果您的目标是互操作性,则uint不应出现在公共API中,因为并非所有CLI语言都支持无符号整数.但这并不能解释为什么int如此普遍,即使在内部课程中也是如此.我怀疑这是因为在BCL中谨慎使用uint的原因.
在C++中,如果你有一个负值没有意义的整数,你选择一个无符号整数.
这清楚地表明不允许或不期望负数,编译器会为您做一些检查.我还怀疑在数组索引的情况下,JIT可以轻松地删除下限检查.
但是,在混合int和单位类型时,需要额外的护理和演员表.
是否应该使用更多?为什么?
jjn*_*guy 74
int
比类型更短uint
.
Ree*_*sey 48
uint
我怀疑你观察为什么没有在BCL中使用是主要原因.
UInt32不符合CLS,这意味着它完全不适合在公共API中使用.如果您要在私有API中使用uint,这将意味着转换到其他类型 - 并且通常更容易和更安全地保持类型相同.
我还怀疑这在C#开发中并不常见,即使C#是唯一使用的语言,主要是因为它在BCL中并不常见.一般来说,开发人员试图(谢天谢地)模仿他们构建的框架的样式 - 在C#的情况下,这意味着尝试使您的API(公共和内部)看起来尽可能像.NET Framework BCL.这意味着谨慎使用uint.
Dan*_*ker 18
通常int
就足够了.如果您满足以下所有条件,您可以使用uint
:
uint
它不符合CLS).< 0
,因为它永远不会true
.>= 0
,因为它永远不会false
.最后一个要求经常被遗忘,并会引入错误:
static void Main(string[] args)
{
if (args.Length == 0) return;
uint last = (uint)(args.Length - 1);
// This will eventually throw an IndexOutOfRangeException:
for (uint i = last; i >= 0; i--)
{
Console.WriteLine(args[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
lor*_*ova 12
1)坏习惯.认真.即使在C/C++中也是如此.
想想常见的for
模式:
for( int i=0; i<3; i++ )
foo(i);
Run Code Online (Sandbox Code Playgroud)
绝对没有理由在那里使用整数.你永远不会有负面价值.但是几乎每个人都会以这种方式做一个简单的循环,即使它包含(至少)另外两个"样式"错误.
2)int
被认为是机器的原生类型.
我更喜欢uint
,int
除非负数实际上在可接受的值范围内。特别是,接受一个int
参数但ArgumentException
如果数字小于零则抛出一个是愚蠢的——使用uint
!
我同意它uint
未被充分利用,我鼓励其他人更多地使用它。
归档时间: |
|
查看次数: |
38202 次 |
最近记录: |