2011-04-20 136 views
3

有人可以幫我解決這個問題嗎?鑄造仿製藥

我有下面的類:

public partial class FObjectSet<T> : IObjectSet<T> where T : class 
{ 
... 
} 

我也有下面的類:如投不工作

public partial class FContext : IContext, IDisposable 
{ 
    public ObjectSet<T> CreateObjectSet<T>() where T : class 
    { 
     var fakeObjectSet = new FObjectSet<T>(); 
     return (fakeObjectSet as IObjectSet<T>) as ObjectSet<T>; 
    } 
} 

CreateOjectSet方法返回null。

p.s.上面的代碼試圖僞造System.Data.Objects.ObjectContext.CreateObjectSet方法。

+2

'FObjectSet '是否繼承'ObjectSet '?如果不是,它將不起作用。 – Ryan 2011-04-20 01:37:34

回答

4

在您的示例中,FObjectSet不會從ObjectSet繼承。它只實現IObjectSet接口。

如果沒有從對象集繼承,你就不需要它鑄造的對象集之前,將其轉換爲一個IObjectSet,其實你就不需要投它在所有...

public partial class FObjectSet<T> : ObjectSet<T> where T : class 
{ 
... 
} 

public partial class FContext : IContext, IDisposable 
{ 
    public ObjectSet<T> CreateObjectSet<T>() where T : class 
    { 
     var fakeObjectSet = new FObjectSet<T>(); 
     return fakeObjectSet; 
    } 
} 
1

這不起作用,因爲FObjectSet<T>不延伸ObjectSet<T>。您可以改爲返回IObjectSet<T>,但我不知道這是否會達到您的要求。