반응형
결합하는 방법 || 조건 문의 연산자
이 질문에 이미 답변이 있습니다.
- 변수가 임시 값 목록에 있는지 확인 7 답변
대신에
if (foo == "1" || foo == "5" || foo == "9" ... )
다음과 유사하게 결합하고 싶습니다 (작동하지 않음).
if (foo == ("1" || "5" || "9" ... ))
가능합니까?
불행히도 가장 좋은 방법은 확장 방법을 만드는 것입니다.
public static bool IsOneOf<T>(this T value, params T[] options)
{
return options.Contains(value);
}
다음과 같이 사용할 수 있습니다.
if (foo.IsOneOf("1", "5", "9"))
{
...
}
일반적이므로 모든 유형 (int, string 등)에 사용할 수 있습니다.
이런 식으로 할 수 없습니다. 대신 다음을 수행 할 수 있습니다.
string[] validValues = new string[] { "1", "5", "9", "whatever" };
if(validValues.Contains(foo))
{
// do something
}
한 가지 가능한 옵션은 다음과 같습니다.
switch (foo)
{
case "1":
case "5":
case "9":
// your code here
break;
}
또 다른 가능한 옵션은 다음과 같습니다.
var vals = new string[] { "1", "5", "9" };
if (vals.Contains(foo))
{
// your code here
}
모든 옵션이 하나의 문자 인 경우 다음을 수행 할 수 있습니다.
if ("159".IndexOf(foo) != -1)
{
//do something
}
또 다른 대안이 있습니다.
bool x = new[] { "1", "5", "9" }.Any(a => a == "5"); //x == true
bool y = new[] { "1", "5", "9" }.Any(a => a == "8"); //y == false
.Contains(foo)
람다의 유연성이 여기서 낭비되기 때문에이 경우 에 사용하는 것이 좋습니다 . 수행해야하는 복잡한 표현이 있다면 Any가 더 유용 할 것입니다.
허용되는 경우이를 수행 할 수 있습니다.
if ( (new string[] {"1","9","5","6" }).Contains(foo))
{
}
다음 switch
문장을 사용할 수 있습니다 .
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}
경우 foo
대소 문자 구분에 문자열,주의를 기울입니다.
if 조건이 여러 개인 경우 컴파일러가 속도를 높이기 위해 가능한 한 점프 테이블 을 생성 하므로 항상 switch 문 사용을 고려해야 합니다. 당신은 살펴 보셔야 여기에 속도 테스트를 위해. 여기서 주목할 점은 조건 수가 오버 헤드를 감당할만큼 충분히 크면 C # 컴파일러가 HashTable 개체도 생성한다는 것입니다.
따라서 이것이 더 나은 접근 방식입니다.
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}
참고 URL : https://stackoverflow.com/questions/17815728/how-to-combine-operators-in-condition-statement
반응형
'IT박스' 카테고리의 다른 글
자바 스크립트 천 구분자 / 문자열 형식 (0) | 2020.10.13 |
---|---|
C / C ++의 최소 double 값 (0) | 2020.10.13 |
웹 사이트에서 C #으로 HTML 코드 가져 오기 (0) | 2020.10.13 |
Backbone.js REST 호출 이해 (0) | 2020.10.13 |
자동 완성이 android sdk에서 작동을 중지했습니다. (0) | 2020.10.13 |