2010-05-21 5 views
3

Vous vous demandez ce qui est l'exception à jeter manière la plus adéquate quand il y a un cas où je reçois une mise en œuvre dans l'interface que je ne vous attendez pastype Exception non prise en charge dans .net

Y at-il une telle chose comme UnsupportedTypeException dans. net que je ne suis pas au courant? Acclamations

+4

Dans quelle situation obtiendriez-vous une implémentation d'une interface qui n'est pas autorisée? L'interface est utilisée parce que vous voulez pouvoir basculer entre les types sans souci. – Tejs

+0

Liskov principe de substitution !!!!!!!!!!!!!!!!!!! – Sebastien

Répondre

4

NotSupportedException existe peut-être ce que vous voulez considérer.

+1

Ce n'est pas la manière prévue d'utiliser cette exception, voir la toute première ligne dans l'article MSDN sur cette exception. – Sebastien

3

Ce qui n'est pas supporté? Quand ce n'est pas supporté, pourquoi votre fonction le prend comme paramètre? Ce n'est pas une bonne conception, car le flux de travail dépend des exceptions et peut entraîner un comportement imprévisible à l'avenir. Une alternative serait de surcharger de telles fonctions et d'être plus spécifique avec les types donnés. Lorsque vous êtes sûr que ce type ne doit pas encore être utilisé mais sera pris en charge dans un délai prévisible, vous pouvez lancer une NotSupportedException avec un Errormessage compréhensible.

+0

Je trouve très difficile de juger un design sans plus d'informations, il y a beaucoup de cas où quelque chose fonctionnerait dans une implémentation et pas dans une autre. Cependant, vous avez raison de dire qu'une exception ne devrait pas faire partie du flux normal mais je ne pense pas que ce soit le cas dans ce cas ... C'est plus une indication pour le programmeur que de contrôler le flux à mon humble avis, évidemment, si ce n'est pas supporté, arrêtez de le faire. :) –

+0

@JoelGauvreau Tim a raison, cela va à l'encontre du principe LSP SOLID. Si une implémentation d'une abstraction n'est pas supportée, cela signifie probablement que votre abstraction est fausse ou qu'il vous manque un niveau d'abstraction. Si ça fait du canard, nage comme un canard, mais a des roues ce n'est pas un canard. – Sebastien

+0

Je ne suis pas d'accord. Un bon exemple est de faire une recherche sur un flux. Fait un sens sur un fichier, ne peut pas le faire en lisant un flux réseau. –

Questions connexes