public static IOrderItemCommand ToCreateOrMergePatchOrderItem <TCreateOrderItem, TMergePatchOrderItem>(this IOrderItemState state) where TCreateOrderItem : ICreateOrderItem, new() where TMergePatchOrderItem : IMergePatchOrderItem, new() { bool bUnsaved = ((IOrderItemState)state).IsUnsaved; if (bUnsaved) { return(state.ToCreateOrderItem <TCreateOrderItem>()); } else { return(state.ToMergePatchOrderItem <TMergePatchOrderItem>()); } }