이것을 작성하는 우아한 방법은 무엇입니까? null에 대한 우아한 검사와 C#에서의 종료
changeColor()
이것을 작성하는 우아한 방법은 무엇입니까? null에 대한 우아한 검사와 C#에서의 종료
changeColor()
당신은 조건을 반대로하여 혼란을 줄일 수 있습니다.
if (lastSelection == null)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
하! 음, +1 분명히 :) – overslacked
나는 개인적으로 정말 트랩 것, 오류 조건 종료를 봤어요, 함수의 여러 반환 진술을 갖는 방어 프로그램에 따라 싫어하고를 통해 무엇을 할 수 있지만 :
if(lastSelection == null)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
그것은이에 속하는 전체 기능을 보지 않고 내 자신의 작품이 할 거라고 어떻게 말을하기 어렵다
:-) 동시에 두 가지 생각이 같은 솔루션에 들어갑니다. 그래도 당신의 의견은 더 많습니다. – Bevan
나는 lastSelection
이 결코 null이 아니 었는지 확인하고 현재 디자인에서 null이 될 경우 "빈"객체를 가리 키도록하고 싶습니다. 그런 다음 null 확인을 할 필요가 없습니다. 시스템에서 발생할 수있는 엔지니어링 오류는 항상 좋은 습관입니다.
IOW, 코드에서 부적절한 점이 null 체크를하는지, 아니면 에 null 체크가 전혀 필요하지 않은지 여부를 물어볼 것입니다..
"null"확인이 필요하지 않을 수도 있지만 UI 코드 인 것으로 보이며 사용자가 선택하지 않으면 "No Selection Made"라고 알리는 것이 좋습니다. 이 경우 Null Object Pattern을 사용해도 사용자에게 알리기 위해 Null 객체를 검사해야합니다. –
@ 존 손더스 : 그렇다면 실행 가능한 작업이 아닌 경우에도 색상을 변경하는 옵션이 존재하는 이유는 무엇인지 물어볼 것입니다.이 경우 컨트롤을 사용하지 않도록 설정하여 작업을 차단하는 것이 좋습니다. 이 코드.또는 null 개체가 메시지 상자를 직접 또는 간접적으로 표시 할 수 있습니다 (예 : 상자에 표시되는 UI의 코드에 연결된 이벤트를 통해 null 개체가 UI 세부 정보를 인식하지 못하게 함). – kyoryu
@ John Saunders : (BTW, null 체크를 피할 수있는 실행 가능한 옵션이 없을 수도 있지만 확실히 존재하는지 확인하려고합니다.) – kyoryu
나는 정상적인 경우 (lastSelection != null)
을 먼저 확인한 다음 비정상적인 경우를 확인했습니다.
if (lastSelection == null) goto ERR;
lastSelection.changeColor();
//... possibly more stuff...
return;
ERR:
MessageBox.Show("No Selection Made");
@ Sameh : 제안 된 코드가 메소드에있는 경우 제안이 작동합니다. 그러나 동일한 코드의 사본이 10 개 (각각 null이 아닌 다른 변수를 검사하는 경우)하면 어떻게 할 수 있습니까? –
@ 존 : 이것은 좋은 지적이지만, 그의 문제는 내가 말한 것을 말하기에 충분할 정도로 단순 해 보인다. –
@Sameh : 그는 내게 모든 코드를 보여주지 않았으며 그가 보여준 코드 만이 메서드의 유일한 코드는 아니 었습니다. 나는 그것에 대해 잘못 될 수 있습니다. –
보면 모두 다른 좋은 답변, 이을하지 마십시오있어 :
나는 단지 하나의 수정을 추가 할 수 있습니다 다음과 같이 먼저 null :
if (null == lastSelection)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
ㅎ. 이것은 좋은 조언입니다. 여러 return 문을 싫어한다고 말했을 때, 나는 어떤 의미로든 gotos를 옹호하려하지 않았습니다. – overslacked
빨리 잡기 연습을 작성하는 것입니다 :
if (lastSelection != null)
{
lastSelection.changeColor();
//your other normal code
}
else
{
MessageBox.Show("No Selection Made");
//return; //no need for this now
}
@pokrate : "빠르게 따라 잡을 수 있습니까?" 컴파일러가'if (lastSelection = null)'에 대해 경고하지 않을 때, C의 시대의 유물이다. 거의 20 년이 넘었습니다! –
@pokrate, 만약 당신이 모를 경우에, 당신은 실제로 * 컴파일러 오류 *를 얻을 것이다. 나는 이런 종류의 구조가 모두 잃어 버릴 것이기에 너무 슬퍼합니다. – overslacked
그게 새로운 연습입니다. 거의 모든 asp.net 스타터 키트와 여기 StackOverflow에서 보았습니다. 그리고 나는 VS2008을 사용하고 있는데 어떤 컴파일러 경고도 볼 수 없다. – pokrate
이것은 아직 없습니다. 이것을 구현하는 다른 방법. lastSelection 변경할 수있는 기회가 있다면
Action _action = (lastSelection != null
?
new Action(lastSelection.changeColor)
:
() => Console.WriteLine("No Selection Made"));
_action.Invoke();
아마 조금 잔인한,하지만 당신은 확실히 사람들이 또한
, 이런 건 :-) 머리를 긁적 코드를 유지해야합니다, 당신은 저장한다 로컬에서 현재 값을 사용하거나 내 응답마다 null 객체 패턴을 사용하십시오. 그렇지 않으면 lastSelection이 'if'와 'if'사이에서 변경되면 null 참조 예외가 발생할 위험이 있습니다. – kyoryu