簡體   English   中英

如何將通用對象轉換為MyType?

[英]How can I cast a generic object to MyType?

我得到錯誤

"Error  4   Cannot convert type 'TExternalEntity' to 'OTIS.Domain.InventoryMgmt.OrderHeader'"

為什么不? 我確定它與定義通用類型的where語句有關,但不確定如何解決此問題。

我們可以看到我們正在測試以查看類型是否為OrderHeader類型,所以我們不能OrderHeaderOrderHeader嗎?

public ActionConfirmation<string> CreateUpdateEntity<TExternalEntity>
    (TExternalEntity entity, CompanyPreferencesFinancialsSystemCommon preferences)
        where TExternalEntity : class, OTIS.Domain.IEntity, IFinancials, new()
{

    //Determine TExternalEntity type (invoice, vendor, customer) to determine which
    //mapper class to create. Then convert TExternalEntity to TQuickbooksEntity.

    if (entity is InvoiceHeader)
    {
        var qbInvoice = new InvoiceMapper().ToQuickbooksEntity(entity as InvoiceHeader, preferences);

        return CreateUpdateQuickBooksEntity(
            qbInvoice,
            x => x.Id == entity.FinancialsId,   
            entity.FinancialsId);
    }

    if (entity is OrderHeader)
    {
        var orderHdr = (OrderHeader)entity; <------ ERROR HERE
        var qbSalesReceipt = orderHdr.ToQuickBooksEntity(preferences);

        return CreateUpdateQuickBooksEntity(
            qbInvoice,
            x => x.Id == entity.FinancialsId,
            entity.FinancialsId);
    }

您可能應該提到這是一個編譯時錯誤,而不是運行時錯誤。

編譯器不知道您正在測試類型,因此它認為此轉換可能會失敗。

評論中的任何建議都應該對您有用。

如果您使用(OrderHeader)(object)entity ,但該實體不是OrderHeader(您知道它是因為您首先對其進行測試,但很幽默),那么您會在該行上收到錯誤消息。

如果您將entity as OrderHeader且該實體不是OrderHeader,則orderHdr變量將設置為null並繼續執行。

我還將您的示例縮減為重復該問題所需的最少代碼。

public ActionConfirmation<string> CreateUpdateEntity<TExternalEntity>(TExternalEntity entity)
{
    if (entity is OrderHeader)
    {
        var orderHdr = (OrderHeader)entity; //<------ ERROR HERE
    }

    return null;
}

暫無
暫無

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

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