Может ли кто-нибудь помочь мне решить эту проблему?

У меня следующий класс:

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 возвращает ноль, поскольку приведение не работает.

P.s. Приведенный выше код пытается подделать метод System.Data.Objects.ObjectContext.CreateObjectSet.

3
Pete Maroun 20 Апр 2011 в 05:36
2
Наследуется ли FObjectSet<T> от ObjectSet<T>? В противном случае это не сработает.
 – 
Ry-
20 Апр 2011 в 05:37

2 ответа

Лучший ответ

В вашем примере FObjectSet не наследуется от ObjectSet. Он реализует только интерфейс IObjectSet.

Если бы он унаследовал от 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;
    }
}
4
Brian 20 Апр 2011 в 05:45

Это не работает, потому что FObjectSet<T> не расширяет ObjectSet<T>. Вместо этого вы можете вернуть IObjectSet<T>, но я не знаю, поможет ли это вам.

1
Jeffrey Hantin 20 Апр 2011 в 05:39