Supposons l'exemple suivant. Une approche générique du traitement de la connexion à la base de données. DbConnection.BeginTransaction()
(à partir de System.Data.Common) renvoie une instance DbTransaction
. Puisque cela est explicitement indiqué, pourquoi dois-je le lancer explicitement?Rétablissement des types génériques
internal abstract class ADatabase<DbCommandType, DbConnectionType, DbTransactionType> : IDisposable
where DbCommandType : DbCommand, new()
where DbConnectionType : DbConnection, new()
where DbTransactionType : DbTransaction, new()
{
DbConnectionType _connection;
DbTransactionType _transaction;
void Foo()
{
_transaction = _connection.BeginTransaction(); // <-- Error..
}
}
L'erreur que je reçois est
Erreur 1 Impossible de convertir implicitement le type 'System.Data.Common.DbTransaction' à 'DbTransactionType'. Une conversion explicite existe (vous manque un casting?)
Bien sûr, je peux le jeter, mais la question est pourquoi ?
Mon point exactement. Alors pourquoi l'erreur? – Odys
@odyodyodys: Veuillez relire ma réponse. C'est la même chose que si vous demandez pourquoi vous devez lancer un 'object' quand vous voulez l'assigner à' string'. –
La classe 'public abstraite DbConnection.BeginTransaction()' renvoie un 'DbTransaction' et non un' object'. S'il vous plaît corrigez-moi si cela est faux. – Odys