This documentation is archived and is not being maintained.

Guid.CompareTo Method

Compares this instance to a specified object and returns an indication of their relative values.

[Visual Basic]
Public Overridable Function CompareTo( _
   ByVal value As Object _
) As Integer
[C#]
public virtual int CompareTo(
 object value
);
[C++]
public: virtual int CompareTo(
 Object* value
);
[JScript]
public function CompareTo(
   value : Object
) : int;

Parameters

value
An object to compare, or a null reference (Nothing in Visual Basic).

Return Value

A signed number indicating the relative values of this instance and value.

Value Description
A negative integer This instance is less than value.
Zero This instance is equal to value.
A positive integer This instance is greater than value.

-or-

value is a null reference (Nothing in Visual Basic).

Exceptions

Exception Type Condition
ArgumentException value is not a Guid.

Remarks

Any instance of Guid, regardless of its value, is considered greater than a null reference (Nothing in Visual Basic).

value must be a null reference (Nothing) or an instance of Guid; otherwise, an exception is thrown.

Example

The following code sample demonstrates how to attach and read a Guid object as an attribute on a user-defined class or interface.

[Visual Basic] 
Imports System
Imports System.Runtime.InteropServices

' Guid for the interface IMyInterface.
<Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")> _
Interface IMyInterface
    Sub MyMethod()
End Interface

' Guid for the coclass MyTestClass.
<Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")> _
Public Class MyTestClass
    Implements IMyInterface
    
    ' Run regasm on this assembly to create .reg and .tlb files.
    ' Reg file can be used to register this coclass in the registry.
    ' Tlb file will be used to do interop.
    Public Sub MyMethod() Implements IMyInterface.MyMethod
    End Sub
    
    Public Shared Sub Main()
        ' Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        ' How to specify the attribute on interface/coclass.
        ' Retrieve the GuidAttribute from an interface/coclass.
        ' Value property on GuidAttribute class.
        ' Example addresses the following in System.Guid.
        ' Constructor Guid(string).
        ' Constructor Guid(ByteArray).
        ' Equals.
        ' Operator ==.
        ' CompareTo.
        Dim IMyInterfaceAttribute As Attribute = Attribute.GetCustomAttribute(GetType(IMyInterface), GetType(GuidAttribute))
        
        ' The Value property of GuidAttribute returns a string. 
        System.Console.WriteLine("IMyInterface Attribute: " + CType(IMyInterfaceAttribute, GuidAttribute).Value)
        
        ' Using the string to create a guid.
        Dim myGuid1 As New Guid(CType(IMyInterfaceAttribute, GuidAttribute).Value)
        ' Using a byte array to create a guid.
        Dim myGuid2 As New Guid(myGuid1.ToByteArray())
        
        ' Equals is overridden and so value comparison is done though references are different.
        If myGuid1.Equals(myGuid2) Then
            System.Console.WriteLine("myGuid1 equals myGuid2")
        Else
            System.Console.WriteLine("myGuid1 not equals myGuid2")
        End If 
        ' Equality operator can also be used to determine if two guids have same value.
        If myGuid1.ToString() = myGuid2.ToString() Then
            System.Console.WriteLine("myGuid1 == myGuid2")
        Else
            System.Console.WriteLine("myGuid1 != myGuid2")
        End If
        ' CompareTo returns 0 if the guids have same value.
        If myGuid1.CompareTo(myGuid2) = 0 Then
            System.Console.WriteLine("myGuid1 compares to myGuid2")
        Else
            System.Console.WriteLine("myGuid1 does not compare to myGuid2")
        End If 
        
        System.Console.ReadLine()

        'Output:
        'IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        'myGuid1 equals myGuid2
        'myGuid1 == myGuid2
        'myGuid1 compares to myGuid2
    End Sub
End Class

[C#] 
using System;
using System.Runtime.InteropServices;

// Guid for the interface IMyInterface.
[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
interface IMyInterface
{
    void MyMethod();
}

// Guid for the coclass MyTestClass.
[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public class MyTestClass : IMyInterface
{
    // Run regasm on this assembly to create .reg and .tlb files.
    // Reg file can be used to register this coclass in the registry.
    // Tlb file will be used to do interop.

    public void MyMethod() {}

    public static void Main( string []args )
    {
        // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        // How to specify the attribute on interface/coclass.
        // Retrieve the GuidAttribute from an interface/coclass.
        // Value property on GuidAttribute class.

        // Example addresses the following in System.Guid.
        // Constructor Guid(string).
        // Constructor Guid(ByteArray).
        // Equals.
        // Operator ==.
        // CompareTo.

        Attribute IMyInterfaceAttribute = Attribute.GetCustomAttribute( typeof( IMyInterface ), typeof( GuidAttribute ) );
        
        // The Value property of GuidAttribute returns a string. 
        System.Console.WriteLine( "IMyInterface Attribute: " + ((GuidAttribute)IMyInterfaceAttribute).Value );    

        // Using the string to create a guid.
        Guid myGuid1 = new Guid( ((GuidAttribute)IMyInterfaceAttribute).Value );
        // Using a byte array to create a guid.
        Guid myGuid2 = new Guid ( myGuid1.ToByteArray() );

        // Equals is overridden and so value comparison is done though references are different.
        if ( myGuid1.Equals( myGuid2 ) )
            System.Console.WriteLine( "myGuid1 equals myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 not equals myGuid2" );

        // Equality operator can also be used to determine if two guids have same value.
        if ( myGuid1 == myGuid2 )
            System.Console.WriteLine( "myGuid1 == myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 != myGuid2" );
    
        // CompareTo returns 0 if the guids have same value.
        if ( myGuid1.CompareTo( myGuid2 ) == 0 )
            System.Console.WriteLine( "myGuid1 compares to myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 does not compare to myGuid2" );

        System.Console.ReadLine();

        //Output.
        //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        //myGuid1 equals myGuid2
        //myGuid1 == myGuid2
        //myGuid1 compares to myGuid2
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Runtime::InteropServices;

// Guid for the interface IMyInterface.
[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
__gc __interface IMyInterface
{
    void MyMethod();
};

// Guid for the coclass MyTestClass.
[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public __gc class MyTestClass : public IMyInterface
{
    // Run regasm on this assembly to create .reg and .tlb files.
    // Reg file can be used to register this coclass in the registry.
    // Tlb file will be used to do interop.
public:
    void MyMethod() {}
};


int main()
{
    // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
    // How to specify the attribute on interface/coclass.
    // Retrieve the GuidAttribute from an interface/coclass.
    // Value property on GuidAttribute class.

    // Example addresses the following in System.Guid.
    // Constructor Guid(string).
    // Constructor Guid(ByteArray).
    // Equals.
    // Operator ==.
    // CompareTo.

    Attribute* IMyInterfaceAttribute = Attribute::GetCustomAttribute( __typeof( IMyInterface ), __typeof( GuidAttribute ) );
    
    // The Value property of GuidAttribute returns a string. 
    System::Console::WriteLine( String::Concat("IMyInterface Attribute: ", (dynamic_cast<GuidAttribute*>(IMyInterfaceAttribute))->Value ));    

    // Using the string to create a guid.
    Guid myGuid1 = Guid(dynamic_cast<GuidAttribute*>(IMyInterfaceAttribute)->Value );
    // Using a byte array to create a guid.
    Guid myGuid2 = Guid ( myGuid1.ToByteArray() );

    // Equals is overridden and so value comparison is done though references are different.
    if ( myGuid1.Equals(__box(myGuid2)) )
        System::Console::WriteLine( "myGuid1 equals myGuid2" );
    else
        System::Console::WriteLine( "myGuid1 not equals myGuid2" );

    // Equality operator can also be used to determine if two guids have same value.
    if ( Guid::op_Equality ( myGuid1, myGuid2) )
        System::Console::WriteLine( "myGuid1 == myGuid2" );
    else
        System::Console::WriteLine( "myGuid1 != myGuid2" );
    
    // CompareTo returns 0 if the guids have same value.
    if ( myGuid1.CompareTo(__box(myGuid2)) == 0 )
        System::Console::WriteLine( "myGuid1 compares to myGuid2" );
    else
        System::Console::WriteLine( "myGuid1 does not compare to myGuid2" );

    //Output.
    //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
    //myGuid1 equals myGuid2
    //myGuid1 == myGuid2
    //myGuid1 compares to myGuid2
}

[JScript] 
import System;
import System.Runtime.InteropServices;

// Guid for the interface IMyInterface.
Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4") interface IMyInterface
{
    function MyMethod();
}

// Guid for the coclass MyTestClass.
public Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8") class MyTestClass implements IMyInterface
{
    // Run regasm on this assembly to create .reg and .tlb files.
    // Reg file can be used to register this coclass in the registry.
    // Tlb file will be used to do interop.

    public function MyMethod() {}

    public static function Main()
    {
        // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        // How to specify the attribute on interface/coclass.
        // Retrieve the GuidAttribute from an interface/coclass.
        // Value property on GuidAttribute class.

        // Example addresses the following in System.Guid.
        // Constructor Guid(string).
        // Constructor Guid(ByteArray).
        // Equals.
        // Operator ==.
        // CompareTo.

        var IMyInterfaceAttribute : Attribute = Attribute.GetCustomAttribute(Type.GetType("IMyInterface"), GuidAttribute);
        
        // The Value property of GuidAttribute returns a string. 
        System.Console.WriteLine( "IMyInterface Attribute: " + (GuidAttribute(IMyInterfaceAttribute)).Value );    

        // Using the string to create a guid.
        var myGuid1 : Guid = new Guid( (GuidAttribute(IMyInterfaceAttribute)).Value );
        // Using a byte array to create a guid.
        var myGuid2 : Guid = new Guid ( myGuid1.ToByteArray() );

        // Equals is overridden and so value comparison is done though references are different.
        if ( myGuid1.Equals( myGuid2 ) )
            System.Console.WriteLine( "myGuid1 equals myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 not equals myGuid2" );

        // Equality operator can also be used to determine if two guids have same value.
        if ( myGuid1 == myGuid2 )
            System.Console.WriteLine( "myGuid1 == myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 != myGuid2" );
    
        // CompareTo returns 0 if the guids have same value.
        if ( myGuid1.CompareTo( myGuid2 ) == 0 )
            System.Console.WriteLine( "myGuid1 compares to myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 does not compare to myGuid2" );

        System.Console.ReadLine();

        //Output.
        //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        //myGuid1 equals myGuid2
        //myGuid1 == myGuid2
        //myGuid1 compares to myGuid2
    }
}

MyTestClass.Main();

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework

See Also

Guid Structure | Guid Members | System Namespace

Show: