2010-05-05 9 views
3

Quelqu'un at-il trouvé étrange que le contexte par défaut pour uint et ulong n'est pas cochée plutôt que checked considérant qu'ils sont censés représenter des valeurs qui ne peut jamais être négatif? Donc, si un code essaye de violer cette contrainte, il me semble que le comportement naturel et préféré serait de lancer une exception plutôt que de retourner la valeur max à la place (ce qui peut facilement laisser des données importantes dans un état invalide et impossible de revenir ..).Faire en sorte unsigned int/long exécuter toujours dans un contexte contrôlé en C#

Y at-il un attribut existant qui peut être appliqué à une ou l'autre classe/assemblage afin qu'il effectue toujours des opérations arithmétiques dans un contexte contrôlé? Je pensais en écrire un moi-même (en utilisant PostSharp) mais ce serait génial s'il y en avait déjà un.

Un grand merci,

Répondre

4

Je ne vois pas ce qui est différent des entiers non signés ici par rapport à ceux signés ... pourquoi est underflowing 0-uint.MaxValue probablement mieux que underflowing de int.MinValue à int.MaxValue?

Si vous voulez qu'un ensemble soit compilé avec vérification, utilisez simplement /checked (ou /checked+ pour être plus explicite) sur la ligne de commande ou dans Visual Studio, sous les propriétés du projet trouvez l'onglet Construire, cliquez sur "Avancé". . "et cocher la case" Vérifier les dépassements/débordements arithmétiques ".

Je ne crois pas qu'il y ait une façon de le faire juste pour une classe particulière.

+0

totalement d'accord avec votre point sur des entiers signés, ce comportement par défaut de manipulation underflowing semble étrange, savez-vous pourquoi il a été conçu de cette façon? et merci pour le conseil sur la compilation de l'ensemble avec vérification, c'est exactement ce que je cherche! :-) – theburningmonk

+0

@theburningmonk: Je crois que le défaut a été choisi parce qu'il est nettement plus performant que la mise en œuvre contrôlée. Il convient de noter que vous voulez probablement des blocs non contrôlés pour le calcul des codes de hachage, où il est vraiment juste le modèle binaire qui compte, pas l'ampleur. –