相关疑难解决方法(0)

我应该在C#中使用uint来获取不能为负的值吗?

我刚才想实现一类其中有大量的长/计数性能等方面都uint代替int.然而,在这样做的同时,我注意到这样做真的很痛苦,就好像没有人真的想要那样做.

几乎所有提出整数类型的东西都会返回int,因此需要在几个点上进行转换.我想构建一个StringBuffer缓冲区长度默认为该类中的一个字段.也需要演员.

所以我想知道我是否应该回到int这里.无论如何,我当然不会使用整个范围.我只是想,因为我在那里处理的根本不能是负面的(如果它是,这是一个错误)实际使用它是一个好主意uint.

PS:我看到了这个问题,这至少解释了为什么框架本身总是使用,int但即使在自己的代码中,它实际上很难坚持,uint这让我觉得它显然不是真正想要的.

c# integer

75
推荐指数
2
解决办法
1万
查看次数

为什么.NET在某些类中使用int而不是uint?

即使在框架类中,我总是遇到int用于.Count等等的代码而不是代码uint.

这是什么原因?

.net c#

50
推荐指数
3
解决办法
4505
查看次数

为什么Count不是无符号整数?

可能重复:
为什么.NET在某些类中使用int而不是uint?
为什么Array.Length是int,而不是uint

我一直想知道为什么.Count不是无符号整数而不是有符号整数?

例如,拿ListView.SelectedItems.Count.元素的数量不能少于0,那么为什么它是一个有符号的int?

如果我尝试测试是否有选择的元素,我想测试

 if (ListView.SelectedItems.Count == 0) {}
Run Code Online (Sandbox Code Playgroud)

但因为它是有符号整数,我必须测试

 if (ListView.SelectedItems.Count <= 0) {}
Run Code Online (Sandbox Code Playgroud)

或者有什么情况.Count可能<0?

.net c#

47
推荐指数
4
解决办法
5813
查看次数

为什么.NET Framework不使用无符号数据类型?

可能重复:
为什么Array.Length是int,而不是uint

它背后有一个原因.NET Framework不使用无符号数据类型吗?

我不应该在我的代码中采用它们,但是例如,List <> 的Count属性是一个int.你不能有负数,所以为什么不把它定义为uint?即使我知道计数不能为负,我应该只使用int吗?

.net c# .net-4.0 .net-3.5

19
推荐指数
1
解决办法
9613
查看次数

为什么Stream.Write不采用UInt?

Stream.Write使用的对我来说似乎非常不合逻辑int,而不是UInt......对于这个事实,除了"遗留"代码之外是否有其他解释?有人想写-1字节吗?!?

.net c# method-signature cls-compliant

12
推荐指数
2
解决办法
643
查看次数

无符号与带符号数作为索引

在.Net中使用带符号数作为索引的理由是什么?

在Python中,您可以通过发送负数来从数组的末尾开始索引,但在.Net中不是这种情况.对.Net来说,以后添加这样的功能并不容易,因为它可能会在索引时使用特殊规则(是的,一个坏主意,但我猜它会发生)破坏其他代码.

并不是说我曾经需要索引大小超过2,147,483,647的数组,但我真的不明白为什么他们选择签名数字.

是不是因为在代码中使用带符号的数字更为正常?

编辑:我刚刚找到这些链接:

C/C++中无符号迭代的危险

签名字长和索引

编辑2:好的,Matthew Flaschen发布的帖子还有其他几个很好的理由:

  • 历史原因,因为它是一种类似c语言
  • 与c互操作

.net indexing unsigned signed

9
推荐指数
2
解决办法
430
查看次数

为什么不经常使用无符号变量?

似乎无符号整数对方法参数和类成员非常有用,它们永远不应该是负数,但我没有看到很多人以这种方式编写代码.我自己尝试过,发现需要从int转换为uint有点烦人...

无论如何你对此有何想法?

重复

为什么Array Length是Int而不是UInt?

.net c#

5
推荐指数
2
解决办法
2033
查看次数

当内存只是正数时,我们为什么要使用int

我想知道为什么我们使用整数来获取内存中的地址,而内存地址只能是正数?为什么我们不使用无符号整数?

例如:
在C#中,为什么我们有IntPtr,为什么不用UIntPtr?
数组也有Int32.Max的限制.不过,为什么不签名,因为索引只能> = 0?
另外,在C++中,很多代码都将指针地址分配给int而不是uint,这背后有原因吗?这是不好的做法吗?

谢谢!

c# c++

5
推荐指数
0
解决办法
79
查看次数

为什么String.Length签名?

可能重复:
为什么.Net Framework不使用无符号数据类型?

C#编程语言(涵盖C#4.0)(第4版),1.3类型和变量,第9页.

Jon Skeet说;

Hooray for byte是一个无符号类型!事实上,在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; }
Run Code Online (Sandbox Code Playgroud)

也在MSDN中 ;

Length属性返回此实例中Char对象的数量,而不是Unicode字符数.原因是Unicode字符可能由多个Char表示.

它返回当前字符串中的字符对象数.为什么在已经存在类型的情况下String.Length返回?什么是的点和?Int32UInt32signed-unsigned byteString.Length

.net c# unsigned signed string-length

1
推荐指数
2
解决办法
690
查看次数