C# 使用<;=而不是==

C# 使用<;=而不是==,c#,.net,C#,.net,我刚刚遇到了以下代码行: if(someInt <= int.MinValue) { /* ... */ } if(someInt这是int的最小可能值,似乎没有什么可错过的。使用对您来说最直观的代码。这是int的最小可能值,似乎没有什么可错过的。使用对您来说最直观的代码。如果someInt正在被描述通过一些任意的量,上面的代码更有意义。如果someInt被一些任意量递减,上面的代码更有意义。更清楚。someInt永远不应该是=的同时执行==的操作,因此没有性能差异 但是,使用int是多

我刚刚遇到了以下代码行:

if(someInt <= int.MinValue) { /* ... */ }

if(someInt这是int的最小可能值,似乎没有什么可错过的。使用对您来说最直观的代码。

这是int的最小可能值,似乎没有什么可错过的。使用对您来说最直观的代码。

如果
someInt
正在被描述通过一些任意的量,上面的代码更有意义。

如果
someInt
被一些任意量递减,上面的代码更有意义。

更清楚。someInt永远不应该是
通常,当我的代码包含边界测试时,我总是使用=而不是==。即使它不可能在边界之外。这会使意图更清晰。

它只是更清晰。someInt永远不应该是
通常,当我的代码包含边界测试时,我总是使用=而不是==。即使不可能在边界之外。这会使意图更清楚。

没有意义。someInt不可能小于int。MinValue,==就足够了。

使用没有意义。某些int不可能小于int.MinValue,==就足够了。

使用我看到了这种方法的提倡,因为如果出现问题(例如内存损坏),条件仍然会触发。这在您的情况下不是很有用,但在其他情况下,例如循环倒计时到10,内存损坏将值设置为-500,它仍然会终止(而不是永远循环,或者直到循环结束(这可能需要很长时间)。我不确定这是否合理,因为在我看来,处理这类错误的编程很少会做正确的事情。

我看到这种方法被提倡,因为如果出现问题(例如内存损坏),该条件仍将触发。这在您的情况下没有多大用处,但在其他情况下,如倒计时到10且内存损坏将值设置为-500的循环,它仍将终止(而不是永远循环,或者直到它翻滚,这可能需要很长时间)。我不确定我是否认为这是合理的,因为在我看来,处理此类错误的编程很少会做正确的事情。

我会说这是一个错误(或者可能是已更改的内容的遗留问题,即它最初是int.MinValue以外的值)


我会说这是一个错误(或者可能是已经更改的内容遗留下来的,也就是说,它最初是一个非int.MinValue的值)


这里的行为是相同的,但是假设您后来将
int.MinValue
更改为其他一些小值。使用
这里的行为是相同的,但是假设您后来将
int.MinValue
更改为其他一些小值。同样,如果
someInt
更改一天为
长时间,那么使用
也是有意义的

此外,如果某个int
某一天更改为
long

这是循环中使用的常用方法,而不是(例如)

使用

虽然您知道值“不应该”大于max,但如果程序逻辑的某些部分出错,并且值以(max+12)的形式传入,会发生什么情况?第一种情况将尝试在32位系统上循环40亿次;第二种情况将在意识到您已通过“max”位置时退出

因此,这是一种更为稳健的表达方式,因为当所有内容都正确设置时,它会工作,但当有人出错时,它也会工作(或者至少不会灾难性地失败)。处理器可以在内部类型上执行>=的同时执行==的操作,因此没有性能差异


但是,使用是多余的(尽管无害),这是循环中常用的方法-而不是(例如)

使用

虽然您知道值“不应该”大于max,但如果程序逻辑的某些部分出错,并且值以(max+12)的形式传入,会发生什么情况?第一种情况将尝试在32位系统上循环40亿次;第二种情况将在意识到您已通过“max”位置时退出

因此,这是一种更为稳健的表达方式,因为当所有内容都正确设置时,它会工作,但当有人出错时,它也会工作(或者至少不会灾难性地失败)。处理器可以在内部类型上执行>=的同时执行==的操作,因此没有性能差异


但是,使用int是多余的(尽管无害)。默认情况下,MinValue使用Int32类型的最小值


您的代码很好。我不确定变量someInt的初始化。它可以是Int16、Int32或Int64(可以小于int.MinValue)。

int.MinValue默认使用Int32类型的最小值


您的代码很好。我不确定变量someInt的初始化。它可以是Int16、Int32或Int64(可以小于int.MinValue).

不,你没有遗漏任何东西。比不寻常地选择比较运算符更有趣的是,为什么要进行比较。我非常怀疑与魔法常量的比较。int.MinValue在这里代表什么?它是来自预空类型数据访问层的代码,而someInt是派生自fr的值om是一个可为null的int数据库列。不,您没有遗漏任何内容。比不寻常地选择比较运算符更有趣的是,为什么要进行比较。我非常怀疑与魔法常量的比较。int.MinValue用于代表什么
if (value == max)
    break;
if (value >= max)
    break;