1

次のクラスをJavaからC#に変換したいと思います。

public class ValueComparator implements Comparator{

    @Override
    public int compare(Object ob1, Object ob2){
        int retval = 0;
        if ( ob1 instanceof DataCol && ob2 instanceof DataCol ){
            DataCol c1 = (DataCol) ob1;
            DataCol c2 = (DataCol) ob2;
            if( c1.value < c2.value ) retval = 1;
            if( c1.value > c2.value ) retval = -1;
        } else {
            throw new ClassCastException("ValueComparator: Illegal arguments!");
        }
        return(retval);
    }    
}
4

2 に答える 2

5

IComparer<T>から継承して実装できますComparer<T>

class DataColComparer:Comparer<DataCol>
{
    public override int Compare(DataCol x, DataCol y)
    {
       if(ReferenceEquals(x,y))
         return 0;
       if(x==null)
         return -1;
       if(y==null)
         return +1;
       return Comparer<TValue>.Default.Compare(y.Value, x.Value);
    }
}
于 2012-12-07T14:30:25.307 に答える
1

非ジェネリックIComparerインターフェースを直接実装しないのはなぜですか?つまり、非ジェネリックJavaインターフェースは非ジェネリックC#インターフェースに変換されます。

public class ValueComparator : System.Collections.IComparer
{
    public int Compare(object ob1, object ob2)
    {
        int retval = 0;
        if (ob1 is DataCol && ob2 is DataCol)
        {
            DataCol c1 = (DataCol) ob1;
            DataCol c2 = (DataCol) ob2;
            if (c1.value < c2.value) retval = 1;
            if (c1.value > c2.value) retval = -1;
        }
        else
        {
            throw new ClassCastException("ValueComparator: Illegal arguments!");
        }
        return (retval);
    }
}
于 2012-12-07T15:25:26.610 に答える