2013-10-15 8 views
-2
나는 "프로젝트"의 현재 상태를 등록하는 매우 낡은 기술에 자동화 된 후속 시스템에서 일하고 있어요

에 조금 [] 변환해야 이 시스템에서의 GUI 상호 작용은 사용자가 "점검"하여 프로젝트의 현재 상태를 지정할 수있는 "플래그"라는 이름을 사용합니다. 확인 가능한 11 개의 가능한 상자가 있고 시스템에서 여러 선택을 허용합니다.가 나는 [] 비트의 각 비트를 나타내는 문자열 []

예를 들어 사용자는 "확인 됨"및/또는 "후속 조치 필요"및/또는 "예정 됨"및/또는 "고객과 음성"으로 표시된 확인란을 선택할 수 있습니다 (11 가지 선택 가능).

여기에 문제가 있습니다 -이 사람이이 선택 사항을 데이터베이스에 "비트 합계"로 저장 했으므로 원래의 비트 []의 체크 상자 선택에 대한 int입니다.

나는 데이터베이스에서 정수를 읽 할 1 || 11 개 값의 비트 배열에 다시 전원을 켜 필요가있는 무엇 0 비트 배열에서 문자열 값 중 어떤 상자가 날씨를 결정하기 위해 검사되는지 또는 자동 후속 조치를 수행해야 하는지를 결정해야합니다.

기본적으로 "확인 됨"을 선택하면 후속 조치를 원하지 않습니다. "후속 조치 필요"가 선택되어 있으면 후속 조치가 필요합니다.

여기서 문제는 여러 선택이있을 수 있다는 것입니다.

그래서 INT는 비트 []로 전환 된 후, 우리는 예

1,010001110,1위한 한 각 INT는 상자를 나타낸다

확인했다.

내가 체크하는 박스 결정하기 위해 상자의 레이블을 나타내는 문자열 배열에 이상을 설정하는 방법을 찾을 필요가있다.

+1

데이터베이스에 정확히 무엇이 저장되어 있는지 자세히 설명하십시오. 예제를 제공하십시오. 또한 어떻게 읽으 려하는지, 어떻게 조작하고 싶은지에 대한 예제를 제공하십시오.이 매핑을 통해 여러분은이 코드에 대해 알아야 할 몇 가지 코드를 작성할 수있을 것입니다. "Questions ** asking for 코드 **는 해결할 문제에 대한 최소한의 이해를 보여 주어야 함 ** 시도한 솔루션 ** 포함, 작동하지 않는 이유 및 예상 결과 참고 : Stack Overflow question checklist " – tnw

답변

3

플래그 열거 형을 사용하는 것입니다 C#에서이 작업을 수행하는 일반적인 방법은 -이 귀하의 비트 필드가 정확히 것입니다. 특정 플래그가 설정되어있는 경우

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

테스트하려면 또한 .NET 4 이상에있는 경우이 문제를 단순화하는 Enum.HasFlags 확장 방법이있다

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

.

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

을 그리고 당신의 캐릭터를 구축하는 것을 사용 : 당신이이 방법을 수행하지 않으려면

, 당신은 위치 x의 비트가 이렇게 설정하면 확인할 수 있습니다.

편집 : 또한 비트 단위 연산자와 비트 단위 연산자에 대해 읽어 보시기 바랍니다. 이것은 좋은 시작일 것입니다 : http://blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx