2013-10-15 1 views
-2

Je travaille sur un système de suivi automatisé sur des techniques très anciennes d'enregistrement de l'état actuel d'un "Projet" l'interaction GUI dans ce système utilise ce que l'on appelle des «indicateurs» que l'utilisateur peut «vérifier» pour désigner l'état actuel d'un projet. Il y a 11 cases possibles qui peuvent être vérifiées et le système accepte plusieurs sélections. Par exemple, un utilisateur peut sélectionner une case à cocher intitulée "Confirmé" et ou "Nécessite un suivi" et/ou "Est programmé" et ou "Parlé avec le client" (il y a 11 sélections possibles).Je dois convertir un bit [] en un [] de chaînes représentant chaque bit dans le bit []

Voici le problème - celui qui a écrit cela a enregistré ces sélections dans la base de données dans une "somme de bits" de sorte que ce que vous voyez est un int du bit d'origine [] pour les sélections de cases à cocher.

Ce que j'ai besoin de faire est de lire l'entier de la base de données et le retourner dans un tableau de 11 valeurs de 1 || 0 puis à partir de ce tableau de bits j'ai besoin de déterminer quelles cases de la valeur de chaîne sont vérifiées afin de déterminer la météo ou non j'ai besoin d'effectuer un suivi automatisé.

Donc, fondamentalement, si "Confirmé" est coché, je ne veux pas suivre Si "Needs-followup" est cochée, j'ai besoin de faire un suivi.

Le problème ici est que plusieurs sélections peuvent être présentes.

Ainsi, après l'int est transformé en un peu [], nous avons par exemple

1,0,1,0,0,0,1,1,1,0,1 où chaque int représente une boîte vérifié.

J'ai besoin de trouver un moyen de transformer ce qui précède en un tableau de chaînes représentant les étiquettes de boîte pour déterminer quelles boîtes sont vérifiées.

+1

Soyez plus précis sur ce qui est exactement stocké dans la base de données. Fournir des exemples. Fournissez également des exemples de la façon dont vous voulez les lire, comment vous voulez les manipuler, etc. Je pense qu'en traçant cela, vous pourriez être en mesure d'écrire du code, que vous devriez avoir pour cet article: "Questions ** demandant le code ** doit démontrer une compréhension minimale du problème à résoudre, y compris ** les solutions essayées **, pourquoi elles n'ont pas fonctionné et les résultats attendus. – tnw

Répondre

3

La manière habituelle de faire ceci en C# serait d'utiliser une énumération de drapeaux - c'est exactement ce que votre champ de bits est.

[Flags] 
enum ProjectStatus 
{ 
    Confirmed = 1, 
    NeedsFollowUp = 2, 
    SpokenWithClient = 4, 
    .... 
} 

Pour tester si un est défini drapeau spécifique:

ProjectStatus status = (ProjectStatus)intFromDb; 
if((status & ProjectStatus.Confirmed) == ProjectStatus.Confirmed) 
    // the Confirmed flag is set 

Il y a aussi une méthode d'extension Enum.HasFlags qui simplifie si vous êtes dans .NET 4 ou plus.

Si vous ne souhaitez pas le faire de cette façon, vous pouvez savoir si le bit à la position x est réglée en faisant ceci:

bool isSet = (intFromDb & (1 << x)) != 0; 

et l'utiliser pour construire votre chaîne.

Editer: Je vous suggère également de lire un peu sur les opérateurs bit à bit et ce qu'ils font. Cela pourrait être un bon début: http://blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx