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

CompareTo in C#

请注意,使用字符串按字母顺序以外的顺序进行排序充满了痛苦。你可以尝试使用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-0000maxKey = 99-9999(如果你喜欢,可以包含边界),你可以用正则表达式来检查,而不是使用CompareTo。

Regex.IsMatch(u.RowKey, @"^'d[1-9]-'d{4}$")