簡體   English   中英

在C#中離開基類后,對象變為空

[英]Object becoming null after leaving base class in C#

我試圖通過使用虛擬方法制作一個通用的DAO類來減少項目數據層(類庫)中的代碼,這樣,我將為所需的各種類型提供此類的實現。

為簡單起見,我將只為所有類和必需的參數編寫read方法。

一個要求是將該對象用作該層內所有方法的返回,該對象是如下的通用類:

public class ReturnObject<T>
{
    public T Object { get; set; }
}

我從IDao接口開始:

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

因此,基本上,這是我想要獲得的代碼簡化。 基於T類類型,我將能夠從上下文切換適當的集合,將讀取的對象存儲到returnObject中,然后將其發送回調用方。

由於組織和其他原因,我也有幾個繼承的類,如下所示:

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

調試時,我可以看到Dao類正在發送正確的對象及其所有參數,如圖所示:

在此處輸入圖片說明

但是,調用方法始終為null ,如圖所示:

在此處輸入圖片說明

綜上所述,有人可以指出我在這里做錯了什么嗎? 提前致謝!

您將dynamic轉換為ReturnObject,結果為null,因為它無法將一種類型轉換為另一種類型。

嘗試不使用動態方法,因為您的方法是通用的,所以使用T代替,因此您不必強制轉換

returnObjectReturnObject<object> ,但returnObject as ReturnObject<T>為null。 如果提供的值不是指定的類型,則as運算符將返回null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM