Hi again folks,
I'm trying to convert an IComparer implementation for a SortedList from
VB.NET to C#:
The
VB.NET works fine, the C# throws an InvalidCastException where noted in the code. Any idea why?
VB.NET code
Code:
Private m_XPanderComparer As XPanderComparer
Private m_ControlList As New SortedList(m_XPanderComparer)
â¦
â Add control to control list
e.Control.Tag = m_NextControlKey
m_NextControlKey += 1
m_ControlList.Add(e.Control.Tag, e.Control)
â VB.NET IComparer implmementation
Public Class XPanderComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim xp1 As XPander = CType(x, XPander)
Dim xp2 As XPander = CType(y, XPander)
Dim result As Integer = 0
If xp1.Top < xp2.Top Then result = -1
If xp1.Top > xp2.Top Then result = 1
Return result
End Function
End Class
C# Code
Code:
private XpanderComparer _xpanderComparer = new XpanderComparer();
private SortedList _controlList;
â¦
// Add control to control list
e.Control.Tag = _nextControlKey;
_nextControlKey += 1;
_controlList.Add( e.Control.Tag, e.Control );
// C# IComparer implementation
public class XpanderComparer : IComparer
{
#region IComparer Members
public int Compare(object x, object y)
{
try
{
XpanderControl xpander1 = (XpanderControl)x; <=== InvalidCastException
XpanderControl xpander2 = (XpanderControl)y;
int result = 0;
if( xpander1.Top < xpander2.Top )
result = -1;
if( xpander1.Top > xpander2.Top )
result = 1;
return result;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return 0;
}
}
#endregion
}
Thanks for any thoughts
Bob