[英]How can I cast a generic object to MyType?
我得到錯誤
"Error 4 Cannot convert type 'TExternalEntity' to 'OTIS.Domain.InventoryMgmt.OrderHeader'"
為什么不? 我確定它與定義通用類型的where
語句有關,但不確定如何解決此問題。
我們可以看到我們正在測試以查看類型是否為OrderHeader
類型,所以我們不能OrderHeader
為OrderHeader
嗎?
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.