C语言中的CompareTo

时间:2011-05-27 09:36:39

标签: c#

我目前有代码可以让我检查一个数字是否在一个范围内。我设置了上限和下限,然后使用这样的代码。

u.RowKey.CompareTo(lowerBound) >= 0 & u.RowKey.CompareTo(upperBound) < 0)

当数字很简单时,这适用于我,例如00到08之间的某些东西。但是,如果我只想获得所有数字并仍然使用上述内容,那该怎么办?如何设置比较以包含数字。我需要将upperBound设置为某个东西,但我可以设置哪个大于数字“9”?

行键如下所示:

01-0000
02-0000
89-0000
99-9999

我希望能够设置上限,使其大于99-9999

4 个答案:

答案 0 :(得分:1)

实现自定义比较器,如下所示:

public class RowKeyComparer : IComparer
{
    int Compare(object a, object b)
    {
        var rowA = (RowKey) a;
        var rowB = (RowKey) b;

        ...
    }
}

另见http://support.microsoft.com/kb/320727

答案 1 :(得分:1)

请注意,使用字符串按字母顺序排序的顺序充满了痛苦。您可以尝试使用aa-aaaa作为黑客,但我个人很想写一个数字转换排序(自定义比较器),或者(可能更有效)我可能会添加一个预先计算的数字< / em>等效,即使"01-0000"成为整数10000。然后,您只需对u.KeyNumericValue进行排序。例如,您可以在RowKey setter中执行此操作(并将数值设置为只读,并且只能通过更改密钥进行更改)。

答案 2 :(得分:0)

99-9999 的值分配给upperBound,并按以下方式修改比较语句:

u.RowKey.CompareTo(lowerBound) >= 0 & u.RowKey.CompareTo(upperBound) <= 0)

答案 3 :(得分:0)

鉴于您的示例是字符串,似乎您要检查字符串是否为有效键。假设minKey = 01-0000maxKey = 99-9999(包含边界,如果您愿意),您可以使用正则表达式检查,而不是使用CompareTo。

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

会这样做。