铸造仿制药

时间:2011-04-20 01:36:09

标签: c# .net generics

有人可以帮我解决这个问题吗?

我有以下课程:

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 个答案:

答案 0 :(得分:4)

在您的示例中,FObjectSet似乎不从ObjectSet继承。它只实现了IObjectSet接口。

如果它确实从ObjectSet继承,那么在将它转换为ObjectSet之前不需要将它强制转换为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 :(得分:1)

这不起作用,因为FObjectSet<T>不会延伸ObjectSet<T>。您可以返回IObjectSet<T>,但我不知道这是否符合您的要求。

相关问题