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