保持数字等于或大于零的最佳方法是什么

Bug*_*ick 1 c# zero uint

我想要实现的是确保我的属性始终为 0 或更大。类型并不重要。

可以说:

var x = 3;
var y = 5;
Run Code Online (Sandbox Code Playgroud)

x之后x -= y应该是 0。

目前正在使用这种方式,并且想知道是否有一种没有成员变量的方法:

public int Coins
{
  get { return Math.Max(0, _coins); }
  set { _coins = value; }
}

Run Code Online (Sandbox Code Playgroud)

也无法找到 uint 的方法。

所有建议均表示赞赏。

uint x = 3;
uint y = 5;
Run Code Online (Sandbox Code Playgroud)

预期 x 之后为 0 x -= y,但收到最大单位。

Tua*_*ran 6

如果您实现get和set与自动属性不同,那么您始终需要声明一个私有成员来存储该值。这是设计使然。

即使您使用自动属性并且不声明私有成员,编译器也会这样做。您只是看到更少的代码,但计算机看不到任何差异。

来源: https: //learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

无论如何,我建议做 1 个小改变:

public int Coins
{
  get { return _coins; }
  set { _coins = Math.Max(0, value); }
}
Run Code Online (Sandbox Code Playgroud)

这样,“错误”的 _coins 值就不会被存储。但当然,它基于您的业务逻辑,因此建议的代码可能不适合您