문제
아래 예제와 비슷한 코드를 끊임없이 작성합니다.
if (object["Object Name"] != null) {
if (object["Object Name"] == "Some Value") {
// Do Statement A
} else {
// Do Statement B
}
} else {
// Do Statement B
}
여기서 문제는 물체가 무효인지 아닌지를 많이 점검하고 실제 내용인지 확인할 수 있다는 것입니다.
"Statement B"는 항상 동일하며 제 경우에는 일반적으로 SQL 문입니다.
이것에 대해 더 나은 방법이 있어야합니까?
감사
스티븐
해결책
C#에는 단락이 있으므로 다음을 수행 할 수 있습니다.
if(null != object && object.name == foo)
do A
else
do B
C#은 항상 조건문에서 첫 번째 표현식을 먼저 평가하고 실패하면 진술의 해당 부분에서 다른 것을 시도하지 않습니다.
이 시점에서, 하나 이상의 저렴한 작업과 함께 조건부 명세서에서 값 비싼 작업을 수행하려면 가능한 경우 끝에 적용하는 것이 좋습니다. . 그래서
if(trivial comparison && trivial comparison && REALLY EXPENSIVE OPERATION)
이제 값 비싼 작전 만 최후의 수단으로 실행할 것입니다.
다른 팁
C#은 단락을 수행하기 때문에 예. 이 시도:
if (object["Object Name"] != null && object["Object Name"] == "Some Value")
{
// Do Statement A
}
else
{
// Do Statement B
}
나는 if-then-else를 이것으로 다시 작성하면 단일 B- 결석으로 인해 더 멋지게 보일 것이라고 생각합니다.
if ((object["Object Name"] != null) && (object["Object Name"] == "Some Value"))
{
// Do Statement A
}
else
{
// Do Statement B
}
왜 이중 점검입니까? 분명히 이것은 충분할 것입니다 :
if(object["Object Name"] == "Some Value") {
// Do statement A
} else {
// Do statement B
}
나는 당신이 Null Checking으로 무엇을 얻고 있는지 보지만, 당신이주는 특정 예제에는 그것을 요구하지 않습니다.
편집하다: 이제 당신이 글을 썼다면 이것 대신에:
if (object != null) {
if (object["Object Name"] == "Some Value") {
// Do Statement A
} else {
// Do Statement B
}
} else {
// Do Statement B
}
그러면 해결책은 다음과 같습니다.
if(object != null && object["Object Name"] == "Some Value") {
// Do Statement A
} else {
// Do Statement B
}
면책 조항 : 일반적인 단락 방법을 수행하지 않습니다.
글쎄, 특히 쿼리가 동일하게 유지되는 경우 조회를 수행하기 위해 별도의 기능을 만들 수 있습니다. 그래서 다음과 같은 것 : (의사 코드 수신)
private bool IsNullCheck(string objectName)
{
if (object["Object Name"] != null)
return false;
else
// statement B
}
if (!IsNullCheck("Object Name") && if(object["Object name"] == "Value") {
// stuffs
}
else
{
// Do Statement B
}
또는 같은.
제휴하지 않습니다 StackOverflow