ECMA-334 C# Language Specification14.4.2.3: Better conversion |
Given an implicit conversion C1 that converts from a type S to a type T1, and an implicit conversion C2 that converts from a type S to a type T2, the better conversion of the two conversions is determined as follows:
- If T1 and T2 are the same type, neither conversion is better.
- If S is T1, C1 is the better conversion.
- If S is T2, C2 is the better conversion.
- If an implicit conversion from T1 to T2 exists, and no implicit conversion from T2 to T1 exists, C1 is the better conversion.
- If an implicit conversion from T2 to T1 exists, and no implicit conversion from T1 to T2 exists, C2 is the better conversion.
- If T1 is sbyte and T2 is byte , ushort , uint , or ulong , C1 is the better conversion.
- If T2 is sbyte and T1 is byte , ushort , uint , or ulong , C2 is the better conversion.
- If T1 is short and T2 is ushort , uint , or ulong , C1 is the better conversion.
- If T2 is short and T1 is ushort , uint , or ulong , C2 is the better conversion.
- If T1 is int and T2 is uint , or ulong , C1 is the better conversion.
- If T2 is int and T1 is uint , or ulong , C2 is the better conversion.
- If T1 is long and T2 is ulong , C1 is the better conversion.
- If T2 is long and T1 is ulong , C2 is the better conversion.
- Otherwise, neither conversion is better.
If an implicit conversion C1 is defined by these rules to be a better conversion than an implicit conversion C2, then it is also the case that C2 is a worse conversion than C1.