2016-06-13 2 views
1

저는 C#을 처음 사용하고 웹 페이지에서 스크립트가 어떤 옵션을 선택해야 하는지를 확인하는 조건문을 작성하려고합니다. 지금은 각 옵션에 대해 개별 bool 문을 작성한 곳에서이 작업을 수행하고 있습니다.여러 옵션에 대한 가장 효율적인 조건문?

bool PersonalPolicy = true; 
bool FarmOwnersPolicy = true; 

if (PersonalPolicy) 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_radioListCommOrPersonal_0")).Click(); 
} 
else 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_radioListCommOrPersonal_1")).Click(); 
} 
if (FarmOwnersPolicy) 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_0")).Click(); 
} 
else if (SelectoMaticPolicy) 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_1")).Click(); 
} 
else 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_2")).Click(); 
} 

문제는 내가 백만 부울 문을 만들고 싶어 정말 긴 다른 if 문이없는 옵션의 톤이있다 검사 할 몇 가지 사항입니다. 이 형식을 쉽게 지정하는 방법이 있습니까?

+0

POM에 따라 요소를 정의하십시오. '[FindsBy (How = ID, Using = "cphMain_BLAHBLAHBLAHType_1")] public IWebElement RandomClickableElement; 그런 다음'RandomClickableElement.Click();으로 호출하십시오. –

+0

이렇게 많은 조건을 사용하지 않는 경우 다시 작성할 수 있는지 모르겠습니다 만, 다른 경우에는 코드를 추출하여 작성해야하는 코드를 최소화 할 수 있다고 생각합니다. driver.find ...를 수행하는 별도의 메소드에있는 명령문. 클릭 할 때 사용하는 기존의 문자열에 매개 변수 문자열을 추가합니다. 이렇게하면 적은 코드를 작성할 수 있습니다. – meJustAndrew

+0

@ meJustAndrew 도움이되는 네, 문제의 일부는 코드가 얼마나 많은 옵션을 가지고있을 때 코드를 작성해야 하는지를 최소화 할 수있는 방법을 많이 찾는 것입니다. –

답변

1

이것은 실제 논리에 따라 다릅니다. 그리고이 질문은 "너무 일반적"일 수 있으므로 걱정 스럽습니다.

여전히 여러 상태를 확인하는 방법에는 여러 가지가 있습니다.

개인적으로 개인 정책 (PersonalPolicy, FarmOwnersPolicy 또는 SelectoMaticPolicy가 반환 될 것으로 예상되는)이 여러 개인 경우 하나의 결과 만 예상하는 경우 개인적으로 "PolicyType"변수를 설정하고 해당 정책에 대해 switch 문을 실행합니다. 예 :

switch(PolicyType){ 
    case "PersonalPolicy": 
     // Code specific to PersonalPolicy 
     break; // Don't forget to break unless you want to use "fallthrough logic" 
    case "FarmOwnersPolicy": 
     // Code specific to PersonalPolicy 
     break ; 
    case default: 
     // Code for "any-other-than" cases :) 
     break; 
} 

그러나이 방법은 귀하의 경우 실현되기 위해서는, 당신은 별도의 bools가 실행 수준 또는 오류 수준의 일부 동등한 해결해야 할 것입니다.

그러나 여러 조건을 더 큰 단일 명령문에 연결할 수도 있습니다. 가장 흔히 발생하는 예제는 & & 또는 || 각 문장 사이에 "AND"또는 "OR"을 암시하십시오. OR-문에 특히 역 논리를 적용하는 것은 여러 bools

을 비교할 때 강력한 증명할 수

예 :

if (PersonalPolicy) { } 
else { } 

if (FarmOwnersPolicy && !SelectomaticPolicy) { 
    //Will only be executed if FarmOwnersPolicy is True AND SelectomaticPolicy is NOT true. 
} 

if (!FarmOwnersPolicy && !SelectomaticPolicy) { 
    // Will only be executed if FarmOwnersPolicy AND SelectomaticPolicy are both unset 
} 

if (!FarmOwnersPolicy || !SelectomaticPolicy) { 
    // Will be executed if either FarmOwnersPolicy OR SelectomaticPolicy is unset 
} 

이 후자의 방법을 사용하면 한 번에하고 검사 할 여러 조건이 더 유용 될 수 있습니다 끝이없는 if-else의 행보에 반대되는 잠재 된 가독성을 제공합니다.

"끝없는 양의 수표가 나오는 것처럼 보입니다."나는 보통 블록의 부울 검사와 결과 변수 하나를 "분해"하려고합니다.

좋은 예를 들어주지는 못했지만 주소 섹션 등이있는 huuuuge 양식이 있다고 상상해보십시오. 주소 정보를 먼저 확인하고 추가 섹션에서 향상된 가독성을 위해 "AddressValid"bool뿐입니다. 또한 순차적 bool 로직의 한 부분이 깨지는 경우에는 그렇지 않은 경우 "이 코드가 수행하는 작업"으로 다시 읽는 것이 번거롭지 않을 수 있습니다 그 코드를 조금 만진 것.

편집 :

조건부 (3 자) 연산자도 있습니다. 다음 예에서 사용했을 때

는 다음과 같은 논리 결과
TestCase ? Value1 : Value2; 

:

If (TestCase){ 
    return Value1; 
} 
Else { 
    return Value2; 
} 

내가 default- 특정 변수를 기본-값을 설정하거나 반환이 "모든 시간을"사용 값을 기대 값을 포함하지 않는 경우 값.

+0

이것은 도움이되며 내가 고맙다고 생각하는 것 같습니다. –

+0

당신을 가장 환영합니다. 또한 "기본값"을 얻는 것에 관해서는 매우 편리한 연산자를 언급하는 것을 잊어 버렸습니다. "Ternary Operator"는 몇 분 안에이 답변을 포함하도록 답을 수정합니다 :) – Annihlator

관련 문제