2016-11-13 26 views
-3

我得到這個編譯器錯誤:這是什麼編譯器錯誤與泛型

The type 'Generics.Widget' cannot be used as type parameter 'T' in the generic type or method 'Generics.MyGenerics.Maximum<T>(T, T, T)' . There is no implicit reference conversion from 'Generics.Widget' to 'System.IComparable<Generics.Widget>'

見附件屏幕截圖中的代碼編譯器錯誤嘗試使用這個類。

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace Generics { 
     // A class that implements IComparable 
     class Widget : System.IComparable { 
      private String name; 

      public Widget(String name) { 
       this.name = name; 
      } 

      int System.IComparable.CompareTo(object obj) { 
       return name.CompareTo(((Widget)obj).name); 
      } 
     } 
    } 

Screen Shot of compiler error

+0

約束顯示實際/相關代碼。 – user2864740

+1

我期望降低薪水,但我認爲人們太苛刻了......這不是我們見過的最糟糕的問題。是的,OP可以發佈最大值方法,但錯誤指的是類和相關的代碼顯示... –

+0

@GeorgeVovos我預計沒有降薪。我總是高估了SO居民。 – nicomp

回答

1

您需要實現

public interface IComparable<in T> 


class Widget : System.IComparable<Widget> 
{ 
    public int CompareTo(Widget other) 
    { 
     throw new NotImplementedException(); 
    }  
} 

您還沒有表現出你的最大方法IComparable的

的通用版本,但顯然它有對T

where T : IComparable<Widget>