J
Jeff Mason
I am observing some puzzling behavior with the GetValues method of enumerations. I
wonder if this something I just don't understand, or is this just wrong.
The documentation for the GetValues method says "The elements of the array [returned]
are sorted by the values of the enumeration constants". Further the docs state that
absent any underlying type definition of the enumeration, the type is assumed to be
int32 (a signed integer).
Consider the following code:
Public Enum MyEnum
Entry1
Entry2
Entry3
End Enum
Sub DisplayValues
For Each i As Integer In System.Enum.GetValues(GetType(MyEnum))
Debug.WriteLine(i.ToString)
Next
End Sub
As expected, the values displayed are 0, 1, and 2.
If I redefine the enumeration as:
Public Enum MyEnum
Entry1 = -1
Entry2 = 0
Entry3 = 1
End Enum
Then the values displayed are 0, 1, -1 (!)
It seems the values are sorted as *unsigned* integers.
Thus:
Public Enum MyEnum
Entry1 = -1
Entry2 = -2
Entry3 = 0
End Enum
displays 0, -2, -1 (!!)
What's going on here?
I've verified the same behavior occurs in both .NET 1.1 and 2.0.
-- Jeff
wonder if this something I just don't understand, or is this just wrong.
The documentation for the GetValues method says "The elements of the array [returned]
are sorted by the values of the enumeration constants". Further the docs state that
absent any underlying type definition of the enumeration, the type is assumed to be
int32 (a signed integer).
Consider the following code:
Public Enum MyEnum
Entry1
Entry2
Entry3
End Enum
Sub DisplayValues
For Each i As Integer In System.Enum.GetValues(GetType(MyEnum))
Debug.WriteLine(i.ToString)
Next
End Sub
As expected, the values displayed are 0, 1, and 2.
If I redefine the enumeration as:
Public Enum MyEnum
Entry1 = -1
Entry2 = 0
Entry3 = 1
End Enum
Then the values displayed are 0, 1, -1 (!)
It seems the values are sorted as *unsigned* integers.
Thus:
Public Enum MyEnum
Entry1 = -1
Entry2 = -2
Entry3 = 0
End Enum
displays 0, -2, -1 (!!)
What's going on here?
I've verified the same behavior occurs in both .NET 1.1 and 2.0.
-- Jeff