2013-05-10 2 views
22

여기 GetSourceAttachment 메서드에 대한 단어 파일을 다운로드하는 중입니다. 빈 바이트를 반환하는이 메서드는 다음 바이트 첨부 배열에 오류가 발생합니다 (개체 참조가 개체의 인스턴스를 설정하지 않음). 오류. 하나는 내가 바이트 배열을 초기화하고 길이를 확인 기본값으로 나를 도울 수 있습니다.바이트 배열이 비어 있는지 확인하는 방법?

try 
{ 
     byte[] Attachment = null ; 

     string Extension = string.Empty; 
     ClsPortalManager objPortalManager = new ClsPortalManager(); 
     Attachment = objPortalManager.GetSourceAttachment(Convert.ToInt32(hdnSourceId.Value), out Extension); 
     if (Attachment.Length > 0 && Attachment != null) 
     { 
      DownloadAttachment("Attacment", Attachment, Extension); 
     } 
     else 
     { 
      ClientScript.RegisterStartupScript(typeof(Page), "SymbolError", "<script type='text/javascript'>alert('Attachment is not Uploaded !');</script>"); 
     }    
} 
catch 
{ 

} 

답변

51

단지 조건부 AND 연산자 (& &)이 수행 && Operator

에서

if (Attachment != null && Attachment.Length > 0) 

를 수행 논리 AND의 불리언 피연산자의 만 번째 피연산자 평가 필요하다면.

12

당신은 테스트의 순서를 교체해야합니다

if (Attachment.Length > 0 && Attachment != null) 

사람 : 보낸 사람 :

if (Attachment != null && Attachment.Length > 0) 

첫 번째 버전 시도 역 참조 Attachment 첫째로를 따라서 경우에 발생합니다 그것은 null입니다. 두 번째 버전은 nullness를 먼저 확인하고 null이 아닌 경우 길이를 확인하기 위해 계속 진행합니다 ("부울 단락"으로 인해).

+0

감사 매튜 왓슨 ... – SANDEEP

6

귀하의 확인이 있어야한다 :

if (Attachment != null && Attachment.Length > 0) 

먼저 체크 그 short-circut evaluation

&& Operator (C# Reference)

conditional-의 원인이됩니다 당신이 &&을 사용하고 있기 때문에 첨부가 null 다음 아이폰에있는 경우 AND 연산자 (& &)는 해당 부울의 논리 AND를 수행합니다. 피연산자가 있지만 은 필요한 경우 두 번째 피연산자 만 계산합니다..

은 이전에 당신이 좋아하는 조건이 있었다 : 첫 번째 조건은 재산 Length에 접근하기 때문에, (Attachment.Length > 0 && Attachment != null)Attachment가 null의 경우, 당신은 수정 된 상태 (Attachment != null && Attachment.Length > 0)으로, 처음 널 (null)를 확인합니다 예외와 끝까지과 Attachment이 null이 아닌 경우에만 더 이동합니다.

+0

감사 감사 감사 하비브을보십시오.하지만 당신은 이전에 하나의 문제를 말해 줄 수 있습니까 pls – SANDEEP

+0

@ 샌드위치, 방금 – Habib

4

닷넷 V는

4.6 또는 C# 6.0은 너무 많은 ....이

if (Attachment?.Length > 0) 
+1

전에 예외를 얻는 이유에 대한 답변을 수정 한 5 년 후 우리 시스템은 그것을 인식 할 것입니다 ... 내 4.6 프레임 워크 프로젝트에서 여전히 컴파일 중입니다. 오류로. – HellBaby

+1

@HellBaby 그러면 프로젝트와 관련된 언어를 확인해야합니다. DotNet 4.6을 사용한다고해서 C#> = 6을 사용하는 것은 아닙니다. C# 5를 계속 사용하고있을 수도 있습니다. 프로젝트 설정으로 이동하십시오 : 프로젝트 -> 속성 -> 빌드 -> 고급을 마우스 오른쪽 단추로 클릭하고 C#> = 6으로 명시 적으로 언어를 설정하십시오. –

관련 문제