2011-05-16 69 views
2

是我的問題:通用接口問題

我有接口:

public interface ICell<Feature> 
where Feature: struct, IComparable<ICell<Feature>> 
{ 
    List<ICell<Feature>> Window { get; set; } 
    Feature    GenusFeature { get; set; } 
    Double    VitalityRatio { get; set; } 
    String    PopulationMarker { get; set; } 
    Boolean    Captured { get; set; } 
} 

,想實現這樣ISubstratum接口:

public interface ISubstratum<K,T> : IDisposable 
where K : IDisposable 
where T : struct 
{ 
    ICell<T> this[Int32 i, Int32 j] { get; set; } 
} 

但是編譯器說:

The type 'T' cannot be used as type parameter 'Feature' in the generic type or method 'Colorizer.Core.ICell<Feature>'. There is no boxing conversion or type parameter conversion from 'T' to 'System.IComparable<Colorizer.Core.ICell<T>>'.

在一些可能ISubstratum實現我的計劃傳遞一個位圖以K & & ICELL(推廣的像素信息),如T.

如何解決這個問題?

謝謝!

回答

6

基本上你得有對T額外的約束:

where T : struct, IComparable<ICell<T>> 

那麼它應該工作的罰款。這需要在ICell<Feature>中的Feature上滿足相同的限制。

我還建議您將類型參數Feature重命名爲TFeature,以使其更明顯地成爲類型參數。

+0

良好的重新命名功能。當我閱讀代碼時,這實際上引起了我的興趣。 – Tim 2011-05-16 22:02:43

+0

謝謝!現在這個建立好了) – lexeme 2011-05-17 09:00:27

1

因爲您對ISubstratum接口的T通用類型參數的約束不夠具體。它應該是:

where T : struct, IComparable<ICell<Feature>> 
1

您需要要求T執行由ICell類型定義所定義的IComparable<ICell<T>>

1

是不是因爲你的TISubstratum<K,T>ICell<T>T要求也IComparable<ICell<T>>僅限於結構,?如果你在那裏添加additiion,它是否工作?

public interface ISubstratum<K,T> : IDisposable 
where K : IDisposable 
where T : struct, IComparable<ICell<T>> 
{ 
    ICell<T> this[Int32 i, Int32 j] { get; set; } 
} 

1
public interface ISubstratum<K,T> : IDisposable 
where K : IDisposable 
where T : struct, IComparable<ICell<Feature>> 
{ 
    ICell<T> this[Int32 i, Int32 j] { get; set; } 
}