泛型铸造

本文关键字:泛型 | 更新日期: 2023-09-27 17:50:42

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

我有以下类:

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,因为强制转换不工作。

注。上面的代码试图假冒System.Data.Objects.ObjectContext.CreateObjectSet方法

泛型铸造

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

如果它确实继承了ObjectSet,在将其转换为ObjectSet之前,您不需要将其转换为IObjectSet,实际上,您根本不需要将其转换为ObjectSet…

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;
    }
}

这不起作用,因为FObjectSet<T>不扩展ObjectSet<T>。你可以返回IObjectSet<T>代替,但我不知道这是否会做你想要的。