2014-11-22 91 views
0

我有一個泛型類:C#不能隱式轉換類型時類型相同

public abstract class ModelSet<T> : ObservableCollection<T>, IModelObject where T : ModelObject, new(){ 

    public static ModelSet<T> Lookup(long pObjectId){ 
     return (ModelObjectMap.Get(pObjectId) as ModelSet<T>); 
    } 
} 

我一直在使用一個類運動類型的下面的類實例化定義爲:

class Movement : ModelObject. 

public partial class Movements : ModelSet<Movement> 

的以下代碼將無法編譯,因爲

不能將類型ModelSet<Movement>隱式轉換爲Movements。存在明確的轉換。

Movements X = Movements.Lookup(12345); 

毫無疑問,它們是相同的。我究竟做錯了什麼?

回答

1

當然,它們是一樣的。

不,它們不一樣。一個是Movements,另一個是ModelSet<Movement>。雖然每個Movements實例是ModelSet<Movement>的一個實例,但它完全是可能有一個ModelSet<Movement>這不是Movements ...而您的方法的返回類型僅表示它將返回ModelSet<T>

我們不知道ModelObjectMap.Get(pObjectId)實際上做了什麼,但它肯定會返回ModelSet<Movement>實例,它不是Movements

我們不知道你需要的返回值做什麼,但你肯定可以這樣寫:

ModelSet<Movement> X = Movements.Lookup(12345); 

...雖然這是值得注意的是,Movements類實際上是不參與該打電話;它實際上會編譯爲:

ModelSet<Movement> X = ModelSet<Movement>.Lookup(12345); 
相關問題