1

파일을 덮어 쓰는 방법을 결정하기 위해 "사용자 옵션"을 지원해야하는 프로그램이 있습니다. 사용자는 "옵션"에서 선택할 수 있습니다. 여러 조합으로 인해 모든 "가능한 경우"를 코드화 할 수 없습니다. .. ELSE 문 "이 복잡한 결과 평가는 코드 작성이 어려우며 너무 길어지고 견디기도합니다! 내가 IF의 긴 체인없이보다 신속하고 유기적 인 방법으로 모든 가능한 결과를 평가하는 "분석"의 일종으로이 문제를 해결하기 위해 찾고 있어요논리 계산자

... ELSE 블록

Here 내가 가진 무엇 예를 들어

http://i.stack.imgur.com/Ggpbl.png

: 내 프로그램 옵션에서 사용자가 파일을 덮어 쓰기 선택 옵션 "파일 크기"를 포착하고 선정했다 "> ="이 옵션에 대한 기준도 선택 "파일 ​​날짜로 "plus"< = ","OR "을 선택하면 모든 옵션을 선택하면 s "FILE> = x"또는 "FILE DATE < = x"와 같은 내용.

스크린 샷에서 위의 옵션을 사용하면 사용자는 모든 종류의 가능한 논리 옵션을 만들고 "OR"및 "AND"를 사용하여 결합 할 수 있으며 ">, <,> =, < = =, <> "

이 작은 화면 뒤에있는 복잡성은 거대하며이 문제를 해결하는 방법을 연구 해 왔으며 람다 식과 이진 트리라는 것을 들었지만 내 문제에 적용되는 경우 단서가 없습니다. 적어도 올바른 방향으로 나를 가리 키도록 누군가가 있기 때문에, 나는 대답을 찾기 위해 내 이슈를 올바르게 분류하는 방법을 모르겠다. :)

미리 감사드립니다.

+0

런타임에 부울 표현식을 평가할 수 있어야합니다 (특히 사용자가 자신의 표현식을 추가 할 수있는 경우) -> http://stackoverflow.com/questions/8476422/logic-evaluator-in-c-sharp- 평가 논리 표현식 – fixagon

답변

1

표현 트리을 사용하여 문제가 해결 될 것이라고 생각하지 않습니다. 표현식 트리는 컴파일되기 전에 분석, 개선 또는 평가 될 수있는 기능적 표현식입니다.

config.EnableWhatever(x => x.HasWhatever) 

선택은해야한다 : 당신이 개발자에 의해 결정 몇 가지 구성을 제공하는 특성을 제공해야한다 유창 구성을 만들려면 (다른 사용 사례를 거기를하지만 귀하의 질문에 넘어) 때 좋은 해결책이다 enumerations with [FlagsAttribute] 주위 : 내 말은

[Flags] 
public enum FileSizeOptions 
{ 
    None = 0, 
    IfFileSizeIsGreaterThan = 1, 
    IfFileSizeIsLowerThan = 2, 
    OtherOption = 4, 
    All = IfFileSizeIsGreaterThan | IfFileSizeIsLowerThan | OtherOptions 
} 

FileSizeOptions options = FileSizeOptions.IfFileSizeIsGreaterThan | FileSizeOptions.OtherOption; 

if(options.HasFlag(FileSizeOptions.All)) 
{ 
    // Do stuff 
} else if(options.HasFlag(FileSizeOptions.IfFileSizeIsGreaterThan)) 
{ 
    // Do stuff 
} // and so on... 

, 당신은 마스크 대신 논리 값을 사용해야합니다 및 .NET은 열거 형 마스크 또는 플래그를 구현하기 위해 권장되는 방법으로 있습니다.

즉, 열거 형 값에 전체 열거 형에 정의 된 1 또는 N 개의 가능한 플래그가 있는지 평가할 수 있습니다.