CompareTo in C#
本文关键字:in CompareTo | 更新日期: 2023-09-27 17:57:59
我目前有代码可以检查数字是否在范围内。我设置了上限和下限,然后使用这样的代码。
u.RowKey.CompareTo(lowerBound) >= 0 & u.RowKey.CompareTo(upperBound) < 0)
当数字很简单时,例如00到08之间的数字,这对我来说很有效。然而,如果我只想得到所有的数字,并且仍然使用上面的数字呢。我如何设置我的比较以包括数字。我需要将上限设置为某个值,但我能设置什么大于数字"9"?
行键如下所示:
01-0000
02-0000
89-0000
99-9999
我希望能够设置上限,使其大于99-9999
请注意,使用字符串按字母顺序以外的顺序进行排序充满了痛苦。你可以尝试使用aa-aaaa
作为破解,但就我个人而言,我很想写一个数字转换排序(自定义比较器),或者(可能更有效)我可能会添加一个预先计算的数字等价物,即使"01-0000"
变成整数10000
。然后您只需在u.KeyNumericValue
上进行排序。例如,您可以在RowKey
setter中执行此操作(并使数值只读,并且只能通过更改键来更改)。
实现自定义比较器,如下所示:
public class RowKeyComparer : IComparer
{
int Compare(object a, object b)
{
var rowA = (RowKey) a;
var rowB = (RowKey) b;
...
}
}
另请参阅http://support.microsoft.com/kb/320727
将99-9999的值分配给upperBound
,并将比较语句修改如下:
u.RowKey.CompareTo(lowerBound) >= 0 & u.RowKey.CompareTo(upperBound) <= 0)
假设您的示例是字符串,那么您似乎希望检查这些字符串是否是有效的键。假设minKey = 01-0000
和maxKey = 99-9999
(如果你喜欢,可以包含边界),你可以用正则表达式来检查,而不是使用CompareTo。
Regex.IsMatch(u.RowKey, @"^'d[1-9]-'d{4}$")