J'essaie de travailler autour d'un problème moqueur en créant une maquette personnalisée d'idbset.
La maquette personnalisée: p> La méthode de création donne une erreur de construction que je n'ai aucune idée sur la façon de résoudre: p> ne peut pas spécifier à la fois une classe de contrainte et la contrainte de «classe» ou «structure» p>
BlockQuote> Simplement enlever Les contraintes pour le paramètre de type 'therivitédentité' de la méthode 'tests.dal.dalants.dalants.dalants.dbsetmock.create Quelqu'un peut-il m'aider à construire cette classe? p> p>
Classe code> à partir des contraintes Résultats dans une autre erreur de construction (que je ne comprends pas non plus :(). P>
4 Réponses :
Etant donné que le paramètre type code> est limité à être un Mise à jour forte>: curieusement, il semble y avoir un conflit entre les erreurs de compilateur ici. Si vous «réparez», vous obtenez l'autre, dans une boucle infinie de désespoir. Heureusement, la seconde erreur nous donne également un moyen de sortir: vous pouvez utiliser une implémentation d'interface explicite: p> là semble em> pour ne pas être un moyen de mettre en œuvre cette méthode sans em> à l'aide de la mise en œuvre d'une interface explicite. Si vous en avez besoin dans le cadre de l'interface publique de la classe, je suggère de créer une autre méthode que la mise en œuvre de l'interface transmet à: p> locataire code>, ajout des contraintes Classe code> ou struct code> est redondant. Il suffit de supprimer la contrainte code> de la classe code>.
Veuillez vérifier la question, mise à jour avec les résultats de la simple suppression de «classe» dans les listes de contraintes. Merci
Jordao, j'aimerais pouvoir vous remercier plus que d'accepter votre réponse. / Bows gracieusement! Merci beaucoup, je peux continuer!
Essayez de supprimer classe code> à partir de la pièce de méthode, comme celui-ci; classe, locataire code> est un code redondant. p> p>
Cela se traduit par l'erreur de construction suivante: les contraintes pour le paramètre de type «Tapedentité» de la méthode 'tests.dal.dalants.dalants.dalants.dalants.dalants.dalants
Je vais mettre à jour la question avec la prochaine erreur de construction pour la lisibilité
Il vous dit que la contrainte: est redondant. Vous pouvez simplement supprimer class code> car locataire code> est plus contraint que class code> et inclut classe code>. P> p>
Veuillez vérifier la question, mise à jour avec les résultats de la simple suppression de «classe» dans les listes de contraintes. Merci
Il n'y a actuellement que trois classes héritables dans le cadre dont les descendants peuvent être des types de valeur: Dans certaines langues et cadres, une philosophie de conception dominante est que s'il existe une forme d'expression particulière où le comportement qui s'applique à cette forme générale serait inutile Il n'y a aucune raison pour que le concepteur de langue / cadre ne soit pas démarré pour interdire une telle forme. Sous une telle philosophie, il serait parfaitement légal d'avoir un type générique contraint à un type scellé (E.G. Dans certaines autres langues et cadres, une philosophie différente détient: Si un programmeur peut s'attendre à une forme particulière. d'une construction pour offrir des fonctionnalités au-delà de la forme générale, mais ce n'est pas le cas, et si cette forme particulière ne semblerait pas très utile sans de telles fonctionnalités, la langue devrait interdire, même si la construction serait VE un sens précis qui a été bien défini et ne pouvait être exprimé par d'autres moyens si les responsables de la langue ne voient pas une raison pour que les programmeurs veulent exprimer ce sens réel. P> Le fait que ni C # NOR .NET n'a aucun problème à avoir un paramètre de type contraint à un autre, même lorsque cet autre paramètre est d'un type qui ne serait pas accepté comme une contrainte, suggère que la restriction est imposée artificiellement par la langue en raison de la philosophie susmentionnée. Il est malheureux, IMHO, puisqu'il y a de nombreuses situations où il serait utile de pouvoir dire, par exemple p> et même si .NET permettrait u utilement à une telle construction, et Même si le seul obstacle qui empêche le C # d'excepter du code informatique à rechercher explicitement de telles contraintes afin de les interdire, les concepteurs C # ont décidé d'interdire de telles constructions plutôt que de leur permettre de se comporter comme ça. HasanyFlags code> ne pouvait rien faire directement avec un Néanmène, utile, car il pourrait être de spécifier de telles contraintes, le seul moyen de les spécifier dans C # est d'avoir le code source C # spécifiant un type factice pouvant être utilisé comme contrainte, puis exécutez le code compilé via un utilitaire qui remplacera toutes les références au type factice avec des références au type que on voulait utiliser en premier lieu. p> p> objet code>, valeur de type code> et Enum code>. Les trois de ces types sont des types de classe, mais tout type dérivé de valueltype code> ou Enum code> sera un type de valeur et tout type dérivé de objet code> Ce qui n'est pas dérivé de valeur type code> sera un type de classe. Avec tout type autre que ce qui précède, un classe code> ou struct code> serait soit redondant, soit contradictoire; non coïncidemment, c # désactive les contraintes d'être directement spécifiés pour les types ci-dessus. Fnord) code>. Une telle chose serait inutile si le type en question était scellé et que non la version future ne serait jamais autrement em>, mais puisque l'application de l'interprétation normale des contraintes génériques à une telle situation donnerait un comportement raisonnable et, étant donné qu'il pourrait être éventuellement certaines situations dans lesquelles de telles contraintes pourraient être utiles (par exemple, un code d'écriture pour utiliser une classe qui est en développement et qu'il est actuellement scellé, mais peut être scellé ou non à être scellé dans sa version finale, ni de son code d'écriture pour interfacer avec le code basé sur la réflexion que s'attend à ce que les formes génériques particulières), la philosophie suggère que contraignant un type générique à une classe scellée devrait être légal. p> t code> qu'il ne pouvait pas faire avec system.enum code>, et à l'aide d'un t code> en tant que system.enum code> ne serait généralement pas plus rapide que d'utiliser un system.enum code> (parfois plus lent), mais t code> pourrait néanmoins être utile pour un Motifs de couple: p>
Je suis intéressé à en apprendre davantage sur les situations où le message d'erreur vous indique comment résoudre le problème - vous devez envisager d'utiliser une implémentation d'interface explicite b> comme indice d'erreur - et pourtant, même si le message vous dit Que faire, vous finissez toujours par demander à des personnes sur Internet pour obtenir de l'aide. Que pourrait faire l'équipe du compilateur pour vous permettre de résoudre le problème vous-même?
Probablement rien, je ne suis tout simplement pas assez brillant pour résoudre ces problèmes triviaux. Mes excuses sincères mon grand chef de pensée.
@ERIFLIPPERT Donc, il n'existe aucun moyen de mettre en œuvre cette méthode d'interface par une méthode publique dans ce cas?
@Haxx: J'essaie d'aider. Il n'y a pas d'appel à être sarcastique. Si le message d'erreur n'est pas clair ou inutile, je peux préconiser pour qu'il soit changé plus facilement que vous le pouvez.
@svick: Je ne sais pas; Je ne l'ai pas donné beaucoup de pensée. Je ne connais pas cette interface.
Haha j'ai du mal à croire que, mais pas de mal prévu ici. J'ai eu un sourire sur mon visage en tapant ma réponse. Et si c'était partiellement sarcastique, je ne peux pas vous blâmer car je me sentais stupide assez de lire votre commentaire :)