我收到错误
"Error 4 Cannot convert type 'TExternalEntity' to 'OTIS.Domain.InventoryMgmt.OrderHeader'"
为什么不呢?我确定它与定义泛型类型的where
语句有关,但不完全确定如何解决这个问题。
我们可以看到我们正在测试该类型是否为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);
}
答案 0 :(得分:0)
您可能应该提到这是编译时错误,而不是运行时错误。
编译器不知道您正在测试该类型,因此它看到此强制转换可能会失败。
评论中的任何一条建议都适合您。
如果您使用(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;
}