可能重复:
Why does .Net Framework not use unsigned data types?为什么String.Length被签名?
在The C# Programming Language (Covering C# 4.0) (4th Edition),1.3类型和变量,第9页。
Hooray字节是一个无符号类型!在Java中,一个字节 被签名(并且没有无符号等价物),这使得大量的 位错误地无意义地出错。很可能我们 都应该比我们更多地使用uint,请注意:我确信 许多开发人员在默认情况下需要int整数 类型。框架设计师当然也属于这一类: 为什么要对String.Length进行签名?
当我反编译String.Length;
/// <summary>
/// Gets the number of characters in the current <see cref="T:System.String"/> object.
/// </summary>
///
/// <returns>
/// The number of characters in the current string.
/// </returns>
/// <filterpriority>1</filterpriority>
[__DynamicallyInvokable]
public int Length { [SecuritySafeCritical, __DynamicallyInvokable, MethodImpl(MethodImplOptions.InternalCall)] get; }
也在MSDN;
长度属性在这种情况下 返回字符对象的数量,不是Unicode字符数。原因是一个 Unicode字符可能由多个Char表示。
它返回当前字符串中字符对象的数量。为什么String.Length
在已有类型UInt32
时返回Int32
? signed-unsigned byte
和String.Length
有什么意义?
那么,可悲的是不是正确的答案;)见我的;) – TomTom
感谢downvote,但你的答案并不真正使我的无效。 –
对于业力+1 :-)我认为这是使用'Int32'的合理理由。话虽如此,TomTom的回答可能是实际发生的事情,所以我投了你们俩。 –