C# 对象在离开C中的基类后变为null#

C# 对象在离开C中的基类后变为null#,c#,generics,inheritance,dynamic,C#,Generics,Inheritance,Dynamic,我试图通过使用虚拟方法创建一个通用DAO类来减少项目数据层(类库)中的代码,这样我就可以针对所需的各种类型实现这个类 为了简单起见,我将只为所有类编写read方法,并且只编写必要的参数 一个要求是用作此层中所有方法的返回的对象,它是一个通用类,如下所示: public class ReturnObject<T> { public T Object { get; set; } } 调试时,我可以看到Dao类正在发送正确的对象及其所有参数,如图所示: 但是,调用方法总是得到n

我试图通过使用虚拟方法创建一个通用DAO类来减少项目数据层(类库)中的代码,这样我就可以针对所需的各种类型实现这个类

为了简单起见,我将只为所有类编写read方法,并且只编写必要的参数

一个要求是用作此层中所有方法的返回的对象,它是一个通用类,如下所示:

public class ReturnObject<T>
{
    public T Object { get; set; }
}
调试时,我可以看到Dao类正在发送正确的对象及其所有参数,如图所示:

但是,调用方法总是得到null,如图所示:

说到这里,有人能指出我做错了什么吗?
提前谢谢

将dynamic强制转换为ReturnObject,结果为null,因为它无法将一种类型转换为另一种类型


尝试不使用dynamic,因为您的方法是泛型的,所以请改用T,这样您就不必将dynamic转换为ReturnObject,这会导致null,因为它无法将一种类型转换为另一种类型


尝试不使用动态,您的方法是泛型的,因此请使用T,这样您就不必强制转换
returnObject
returnObject
,但
returnObject as returnObject
为空。如果提供的值不是指定的类型,
as
运算符将返回null。
returnObject
是一个
returnObject
,但
returnObject as returnObject
为null。如果提供的值不是指定的类型,
as
运算符将返回null。

只是一个猜测,但是如果
returnObject!=null
returnObject作为returnObject==null
那么
returnObject
可能不是
returnObject
的实例好吧,我刚刚测试了你的理论,然后。。。我们赢了!有没有关于如何修复的想法,或者正确的方法是什么?这只是一个猜测,但是如果
returnObject!=null
returnObject作为returnObject==null
那么
returnObject
可能不是
returnObject
的实例好吧,我刚刚测试了你的理论,然后。。。我们赢了!有没有关于如何修复的想法,或者正确的方法是什么?谢谢,动态是必需的,否则代码将无法编译,问题是我把它放错地方了。所以我放弃了你的建议,并做了一些调整,现在它的工作完美无瑕!谢谢,动态是必需的,否则代码将无法编译,问题是我把它放错地方了。所以我放弃了你的建议,并做了一些调整,现在它的工作完美无瑕!
public interface IDao<T>
{
    ReturnObject<T> Read(Guid id);
}
public abstract class Dao<T> : IDao<T>
{
    // Database context.
    protected Context Context { get; } = new Context();

    public virtual ReturnObject<T> Read(Guid id)
    {
        // Creating return object.
        var returnObject = new ReturnObject<dynamic>();

        // Reading entity from database.
        try
        {
            switch (typeof(T).ToString())
            {
                case "Foo":
                    returnObject.Object = Context.Foos.First(o => o.Id == id) as dynamic;
                    break;

                case "Bar":
                    returnObject.Object = Context.Bars.First(o => o.Id == id) as dynamic;
                    break;
            }
        }
        catch (Exception exception)
        {
            ...
        }
        finally
        {
            ...
        }

        // Returning result.
        return returnObject as ReturnObject<T>;
    }
}
public class DaoFoo : Dao<Foo>
{
}
public class FooController : ApiController
{
    public IHttpActionResult Get(Guid id)
    {
        var foo= new DaoFoo().Read(id);

        return Content(HttpStatusCode.OK, new foo.Object); 
    }
}