Guid.CompareTo 方法  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将此实例与指定的对象或 Guid 进行比较,并返回二者相对值的指示。
重载
| CompareTo(Guid) | 将此实例与指定 Guid 对象进行比较并返回它们的相对值。 | 
| CompareTo(Object) | 将此实例与指定对象进行比较并返回一个对二者的相对值的指示。 | 
CompareTo(Guid)
- Source:
- Guid.cs
- Source:
- Guid.cs
- Source:
- Guid.cs
- Source:
- Guid.cs
将此实例与指定 Guid 对象进行比较并返回它们的相对值。
public:
 virtual int CompareTo(Guid value);public int CompareTo(Guid value);abstract member CompareTo : Guid -> int
override this.CompareTo : Guid -> intPublic 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)
- Source:
- Guid.cs
- Source:
- Guid.cs
- Source:
- Guid.cs
- Source:
- Guid.cs
将此实例与指定对象进行比较并返回一个对二者的相对值的指示。
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 -> intPublic Function CompareTo (value As Object) As Integer参数
- value
- Object
要比较的对象,或为 null。
返回
一个带符号数字,指示此实例和 value 的相对值。
| 返回值 | 说明 | 
|---|---|
| 负整数 | 此实例小于 value。 | 
| 零 | 此实例等于 value。 | 
| 正整数 | 此实例大于 value,或value为null。 | 
实现
例外
              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”。