How to compare Enum values in C#?
Enum.CompareTo(Object) Method is used to compare the current instance to a specified object and returns an indication of their relative values.
Syntax:
public int CompareTo (object target);
Here, the target is an object to compare or it may be null.
Returns: This method returns a signed number which shows the relative values of the current instance and target as follows:
- Less than zero: If the value of the current instance is less than the value of target.
- Zero: If the value of the current instance is equal to the value of the target.
- Greater than zero: If the value of the current instance is greater than the value of the target or the target is null.
Exceptions:
- ArgumentException: If the target and current instance are not the same types.
- InvalidOperationException: If the instance is not type SByte, Int16, Int32, Int64, Byte, UInt16, UInt32, or UInt64.
- NullReferenceException: If the current instance is null.
Below programs illustrate the use of the above-discussed method:
Example 1:
// C# program to demonstrate the // Enum.CompareTo(Object) Method using System; public class GFG { enum Color { RED, GREEN, BLUE }; // Driver method public static void Main(String[] args) { Color c1 = Color.RED; Color c2 = Color.GREEN; Color c3 = Color.RED; Color c4 = Color.BLUE; Console.Write( "Comparing {0} with {1} : " , c1, c2); // CompareTo method Console.WriteLine(c1.CompareTo(c2)); Console.Write( "Comparing {0} with {1} : " , c1, c3); // CompareTo method Console.WriteLine(c1.CompareTo(c3)); Console.Write( "Comparing {0} with {1} : " , c4, c2); // CompareTo method Console.WriteLine(c4.CompareTo(c2)); } } |
Output:
Comparing RED with GREEN : -1 Comparing RED with RED : 0 Comparing BLUE with GREEN : 1
Example 2:
// C# program to demonstrate the // Enum.CompareTo(Object) Method using System; public class GFG { enum Color{Red, Blue}; enum Seasons {Winter, Summer}; // Driver method public static void Main(String[] args) { Color c1 = Color.Red; Color c2 = Color.Blue; Seasons s1 = Seasons.Winter; Seasons s2 = Seasons.Summer; Console.Write( "Comparing {0} with {1} : " , c1, c2); // CompareTo method Console.WriteLine(c1.CompareTo(c2)); Console.Write( "Comparing {0} with {1} : " , c1, s1); // using CompareTo method // it will give exception // as target and the current // instance are not the same // types Console.WriteLine(c1.CompareTo(s1)); } } |
Runtime Error:
Unhandled Exception:
System.ArgumentException: Object must be the same type as the enum. The type passed in was ‘GFG+Seasons’; the enum type was ‘GFG+Color’.
at System.Enum.CompareTo (System.Object target) <0x7ff9d1544610 + 0x000da> in <0f8aeac9d63d4b8aa575761bb4e65b79>:0
Reference:
- https://docs.microsoft.com/en-us/dotnet/api/system.enum.compareto?view=netframework-4.8