Guid.CompareTo 方法

定义

将此实例与指定的对象或 Guid 进行比较,并返回二者相对值的指示。

重载

CompareTo(Guid)

将此实例与指定 Guid 对象进行比较并返回它们的相对值。

CompareTo(Object)

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

CompareTo(Guid)

将此实例与指定 Guid 对象进行比较并返回它们的相对值。

public:
 virtual int CompareTo(Guid value);
public int CompareTo (Guid value);
abstract member CompareTo : Guid -> int
override this.CompareTo : Guid -> int
Public Function CompareTo (value As Guid) As Integer

参数

value
Guid

要与此实例进行比较的对象。

返回

一个带符号数字,指示此实例和 value 的相对值。

返回值 说明
负整数 此实例小于 value
此实例等于 value
正整数 此实例大于 value

实现

示例

以下示例调用 CompareTo(Guid) 方法以将 GUID 值与两个类似的 GUID 值进行比较。

using System;

public class Example
{
   public static void Main()
   {
      Guid mainGuid = Guid.Parse("01e75c83-c6f5-4192-b57e-7427cec5560d");
      unchecked {
         Guid guid2 = new Guid(0x01e75c83, (short) 0xc6f5,
                               0x4192,
                               new Byte[] { 0xb5, 0x7e, 0x74, 0x27, 0xce, 0xc5, 0x56, 0x0c} );
         Guid guid3 = Guid.Parse("01e75c84-c6f5-4192-b57e-7427cec5560d");

         Console.WriteLine("{0} {1:F} {2}", mainGuid,
                           (Comparison) mainGuid.CompareTo(guid2), guid2);
         Console.WriteLine("{0} {1:F} {2}", mainGuid,
                           (Comparison) mainGuid.CompareTo(guid3), guid3);
      }
   }

   private enum Comparison
   { LessThan = -1, Equals = 0, GreaterThan = 1 }
}
// The example displays the following output:
//    01e75c83-c6f5-4192-b57e-7427cec5560d GreaterThan 01e75c83-c6f5-4192-b57e-7427cec5560c
//    01e75c83-c6f5-4192-b57e-7427cec5560d LessThan 01e75c84-c6f5-4192-b57e-7427cec5560d
open System

type Comparison =
    | ``Less Than`` = -1
    | Equals = 0
    | ``Greater Than`` = 1

let mainGuid = 
    Guid.Parse "01e75c83-c6f5-4192-b57e-7427cec5560d"

let guid2 = Guid(0x01e75c83, 0xc6f5s, 0x4192s, [| 0xb5uy; 0x7euy; 0x74uy; 0x27uy; 0xceuy; 0xc5uy; 0x56uy; 0x0cuy |])
let guid3 = 
    Guid.Parse("01e75c84-c6f5-4192-b57e-7427cec5560d")

printfn $"{mainGuid} {mainGuid.CompareTo guid2 |> enum<Comparison> :F} {guid2}"
printfn $"{mainGuid} {mainGuid.CompareTo guid3 |> enum<Comparison> :F} {guid3}"

// The example displays the following output:
//    01e75c83-c6f5-4192-b57e-7427cec5560d Greater Than 01e75c83-c6f5-4192-b57e-7427cec5560c
//    01e75c83-c6f5-4192-b57e-7427cec5560d Less Than 01e75c84-c6f5-4192-b57e-7427cec5560d
Module Example
   Public Sub Main()
      Dim mainGuid As Guid = Guid.Parse("01e75c83-c6f5-4192-b57e-7427cec5560d")
      Dim guid2 As New Guid(&h01e75c83, 
                            BitConverter.ToInt16(new Byte() { &hf5, &hc6 }, 0), 
                            &h4192, 
                            new Byte() { &hb5, &h7e, &h74, &h27, &hce, &hc5, &h56, &h0c} )
      Dim guid3 As Guid = Guid.Parse("01e75c84-c6f5-4192-b57e-7427cec5560d")
      
      Console.WriteLine("{0} {1:F} {2}", mainGuid, 
                        CType(mainGuid.CompareTo(guid2), Comparison), guid2)
      Console.WriteLine("{0} {1:F} {2}", mainGuid, 
                        CType(mainGuid.CompareTo(guid3), Comparison), guid3)
   End Sub
   
   Private Enum Comparison As Integer
      LessThan = -1
      Equals = 0
      GreaterThan = 1
   End Enum
End Module
' The example displays the following output:
'    01e75c83-c6f5-4192-b57e-7427cec5560d GreaterThan 01e75c83-c6f5-4192-b57e-7427cec5560c
'    01e75c83-c6f5-4192-b57e-7427cec5560d LessThan 01e75c84-c6f5-4192-b57e-7427cec5560d

注解

方法 CompareTo 将 GUID 与提供给 Guid(Int32, Int16, Int16, Byte[]) 构造函数的值一样进行比较,如下所示:

  • 它会比较 UInt32 这些值,如果它们不相等,则返回结果。 如果它们相等,则执行下一次比较。

  • 它会比较第一个 UInt16 值,如果它们不相等,则返回结果。 如果它们相等,则执行下一次比较。

  • 它会比较第二 UInt16 个值,如果它们不相等,则返回结果。 如果它们相等,则执行下一次比较。

  • if 对接下来的八 Byte 个值执行逐字节比较。 当它遇到第一个不相等对时,它将返回结果。 否则,它将返回 0 以指示两 Guid 个值相等。

请注意,最后八个 Guid 字节以反向顺序显示在 的字符串表示形式中,从低字节到高字节。 例如,在值“01e75c83-c6f5-4192-b57e-7427cec5560d”的字符串表示中 Guid ,最后八个字节为“b57e-7427cec5560d”。换句话说,从0xb5开始,从左到右按字节比较最后八个字节。

如果两个 GUID 对一个组件具有相等的值,则 方法将比较下一个组件。 当它找到值不相等的组件时,它将返回结果。

此方法实现 System.IComparable<T> 接口,并且性能略好于 方法,Guid.CompareTo因为它不必将 参数转换为valueGuid值。

适用于

CompareTo(Object)

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

public:
 virtual int CompareTo(System::Object ^ value);
public int CompareTo (object? value);
public int CompareTo (object value);
abstract member CompareTo : obj -> int
override this.CompareTo : obj -> int
Public Function CompareTo (value As Object) As Integer

参数

value
Object

要比较的对象,或为 null

返回

一个带符号数字,指示此实例和 value 的相对值。

返回值 说明
负整数 此实例小于 value
此实例等于 value
正整数 此实例大于 value,或 valuenull

实现

例外

value 不是 Guid

示例

以下示例使用 GuidAttribute 特性将 GUID 分配给类。 它通过调用 Attribute.GetCustomAttribute 方法并将返回GuidAttribute对象的 Parse 属性传递给 Value 方法来检索此 GUID 的值。 然后,它将该 GUID 与值数组进行比较。

using System;
using System.Runtime.InteropServices;

[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public class Example
{
   public static void Main()
   {
      GuidAttribute guidAttr = (GuidAttribute) Attribute.GetCustomAttribute(typeof(Example),
                                                      typeof(GuidAttribute));
      Guid guidValue = Guid.Parse(guidAttr.Value);
      Object[] values = { null , 16,
                          Guid.Parse("01e75c83-c6f5-4192-b57e-7427cec5560d"),
                          guidValue };
      foreach (var value in values) {
         try {
            Console.WriteLine("{0} and {1}: {2}", guidValue,
                              value == null ? "null" : value,
                              guidValue.CompareTo(value));
         }
         catch (ArgumentException) {
            Console.WriteLine("Cannot compare {0} and {1}", guidValue,
                              value == null ? "null" : value);
         }
      }
   }
}
// The example displays the following output:
//    936da01f-9abd-4d9d-80c7-02af85c822a8 and null: 1
//    Cannot compare 936da01f-9abd-4d9d-80c7-02af85c822a8 and 16
//    936da01f-9abd-4d9d-80c7-02af85c822a8 and 01e75c83-c6f5-4192-b57e-7427cec5560d: 1
//    936da01f-9abd-4d9d-80c7-02af85c822a8 and 936da01f-9abd-4d9d-80c7-02af85c822a8: 0
open System
open System.Runtime.InteropServices

[<Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")>]
type Example = class end

let guidAttr = 
    Attribute.GetCustomAttribute(typeof<Example>, typeof<GuidAttribute>) :?> GuidAttribute
    
let guidValue = 
    Guid.Parse guidAttr.Value

let values: obj[] =
    [| null; 16 
       Guid.Parse "01e75c83-c6f5-4192-b57e-7427cec5560d"
       guidValue |]

for value in values do
    try
        printfn $"{guidValue} and %A{value}: {guidValue.CompareTo value}"
    with :? ArgumentException ->
        printfn $"Cannot compare {guidValue} and %A{value}"

// The example displays the following output:
//    936da01f-9abd-4d9d-80c7-02af85c822a8 and <null>: 1
//    Cannot compare 936da01f-9abd-4d9d-80c7-02af85c822a8 and 16
//    936da01f-9abd-4d9d-80c7-02af85c822a8 and 01e75c83-c6f5-4192-b57e-7427cec5560d: 1
//    936da01f-9abd-4d9d-80c7-02af85c822a8 and 936da01f-9abd-4d9d-80c7-02af85c822a8: 0
Imports System.Runtime.InteropServices

<Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")>
Module Example
   Public Sub Main()
      Dim guidAttr As GuidAttribute = CType(Attribute.GetCustomAttribute(GetType(Example), 
                                                      GetType(GuidAttribute)), GuidAttribute)
      Dim guidValue As Guid = Guid.Parse(guidAttr.Value)
      Dim values() As Object = { Nothing, 16, 
                               Guid.Parse("01e75c83-c6f5-4192-b57e-7427cec5560d"),
                               guidValue }
      For Each value In values
         Try
            Console.WriteLine("{0} and {1}: {2}", guidValue, 
                              If(value Is Nothing, "null", value),
                              guidValue.CompareTo(value))
         Catch e As ArgumentException
            Console.WriteLine("Cannot compare {0} and {1}", guidValue,
                              If(value Is Nothing, "null", value))
         End Try                     
      Next                         
   End Sub
End Module
' The example displays the following output:
'    936da01f-9abd-4d9d-80c7-02af85c822a8 and null: 1
'    Cannot compare 936da01f-9abd-4d9d-80c7-02af85c822a8 and 16
'    936da01f-9abd-4d9d-80c7-02af85c822a8 and 01e75c83-c6f5-4192-b57e-7427cec5560d: 1
'    936da01f-9abd-4d9d-80c7-02af85c822a8 and 936da01f-9abd-4d9d-80c7-02af85c822a8: 0

注解

参数 value 必须是 null 或 的 Guid实例;否则会引发异常。 的任何 实例 Guid,无论其值如何,都被视为大于 null

方法 CompareTo 将 GUID 与提供给 Guid 构造函数的值一样进行比较,如下所示:

  • 它会比较 Int32 这些值,如果它们不相等,则返回结果。 如果它们相等,则执行下一次比较。

  • 它会比较第一个 Int16 值,如果它们不相等,则返回结果。 如果它们相等,则执行下一次比较。

  • 它会比较第二 Int16 个值,如果它们不相等,则返回结果。 如果它们相等,则执行下一次比较。

  • if 对接下来的八 Byte 个值执行逐字节比较。 当它遇到第一个不相等对时,它将返回结果。 否则,它将返回 0 以指示两 Guid 个值相等。

如果两个 GUID 对一个组件具有相等的值,则 方法将比较下一个组件。 当它找到值不相等的组件时,它将返回结果。

请注意,最后八个 Guid 字节以反向顺序显示在 的字符串表示形式中,从低字节到高字节。 例如,在值“01e75c83-c6f5-4192-b57e-7427cec5560d”的字符串表示中 Guid ,最后八个字节为“b57e-7427cec5560d”。

适用于