2012-12-07 42 views
1

我想下面的類轉換從Java到C#: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); 
    }  
} 
+3

你只是在尋找'IComparer '接口嗎?請注意,在Java和C#中,使用泛型形式會更好...... –

+0

比較器是否按照「c.Value」的相反順序排序? – CodesInChaos

回答

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); 
    } 
} 
4

您可以通過從Comparer<T>繼承實現IComparer<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); 
    } 
}