Souci avec implémentation de IDbConnection et nullablité - C#/.NET managed - Programmation
Marsh Posté le 24-01-2025 à 14:51:51
Bon, ben c'était tout simple...
Code :
|
Marsh Posté le 25-01-2025 à 10:09:00
Pas si simple que ça je trouve, avec l'introduction de #nullable, y a plein de trucs qui sont apparus (required, null forgive operator, les attributs d'analyse statiques que tu viens de découvrir...).
Sur du code "moderne" ça reste très simple (vu qu'on peut s'en passer ou les utiliser juste à bon escient), mais dès qu'on mixe du legacy (comme là cette interface) ça devient parfois bien tordu.
"Outre les aspects métaphysiques permettant de déterminer le bien du mal d'une telle pratique" : ok alors on n'en parlera pas
Marsh Posté le 27-01-2025 à 19:10:12
TotalRecall a écrit : "Outre les aspects métaphysiques permettant de déterminer le bien du mal d'une telle pratique" : ok alors on n'en parlera pas |
N'empêche, c'est vachement pratique
Code :
|
Pour le contexte, réel, c'est pour une application en ligne de commande qui permet de transformer le résultat d'une requête SQL en CSV.
Vu que je passais déjà par des interfaces pour pouvoir taper dans SQL Server, Oracle, MySQL ou je ne sais quoi en natif, oledb ou odbc, je me suis dis qu'au point où j'en étais, autant permettre de faire la même chose à partir d'un fichier XML.
L'avantage c'est qu'une fois IDbConnection, IDbCommand et IDataReader implémentés j'ai pas eu à changer une ligne de code du programme existant
Marsh Posté le 24-01-2025 à 10:16:19
Bonjour,
Pour les besoins d'un projet, j'ai dû écrire une petite lib permettant d'utiliser un IDataReader basé sur un chemin XPath dans un fichier XML plutôt que le résultat d'une requête SQL dans une base de données.
Outre les aspects métaphysiques permettant de déterminer le bien du mal d'une telle pratique, je me heurte à des messages d'avertissement lors de la compilation que je n'arrive pas à résoudre dans mon implémentation de IDbConnection.
Je suis avec .NET 9.0 et C# 13.0 avec l'option "Nullable = enable".
Voici le code :
Et les avertissements :
Ligne 29, sur le set de ConnectionString, j'ai un CS8767 :
La nullabilité des types référence dans le type du paramètre 'value' de 'void XmlConnection.ConnectionString.set' ne correspond pas au membre implémenté implicitement 'void IDbConnection.ConnectionString.set' (probablement en raison des attributs de nullabilité).
Si je transforme ConnectionString en string? j'ai cette fois un autre numéro d'erreur, inverse, sur les get.
J'ai tenté de passer par un attribut privé et des tests explicites de nullabilité, à la fois avec une propriété string et string?, mais ça ne change rien.
J'ai l'impression que ça vient du fait que IDbConnection a été compilé en mode "string peut être null" alors que mon projet, lui, l'interdit.
J'ai les mêmes soucis sur mes implémentations de IDbCommand.CommandText et IDataReader.
Ça n'empêche pas de compiler, mais un code avec des warnings j'aime pas ça.
Une idée pour résoudre ?