Mat*_*ský 2 .net c# coding-style code-readability base-class-library
我真的很讨厌和IComparer一起工作- 直到今天,经过多年与.Net的合作,我仍然经常被那些1和-1混淆.
我可以用一些不言而喻的名称替换比较结果值,而不必在每次比较调用后将输出整数转换为其他值吗?
我试着像这样定义一个枚举:
public enum ComparerResult
{
ALessThanB = -1,
Equal = 0,
AGreaterThanB = 1
}
if(comparer.Compare(a, b) == ComparerResult.ALessThanB)
Run Code Online (Sandbox Code Playgroud)
但是,如果没有演员阵容,那当然不会编译.
这当然也适用于IComparable.CompareTo.
谢谢你的想法
我更喜欢这个表达少于:
if (comparer.Compare(a, b) < 0)
Run Code Online (Sandbox Code Playgroud)
这是一个很好的助记符,因为您使用相同的运算符与零进行比较,就像在两个操作数之间进行比较一样.
正如Reddog在评论中提醒我的那样,接口的规范并不特别要求-1和1; 它只需要消极和积极的结果.因此,您目前使用的逻辑并不能保证在所有情况下都能正常工作.