2013-05-10 43 views
22

這裏即時下載GetSourceAttachment方法的word文件。當這個方法返回空字節然後我的字節附件數組給出一個錯誤(對象引用沒有設置對象的實例)。當im檢查附件的長度,如果條件那麼它給予錯誤。任何人都可以幫助我默認初始化字節數組,然後檢查長度。如何檢查字節數組是否爲空?

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

只是做

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

&& Operator

的條件與運算(& &)執行邏輯與它的布爾 操作數的但只計算它的第二個操作數如有必要。

12

您必須交換測試的順序:

來源:

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

要:

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

第一個版本嘗試取消引用Attachment第一,因此將引發它是空的。第二個版本將首先檢查是否爲空,並且只有在長度不爲空(由於「布爾短路」)時纔會檢查長度。

+0

感謝馬修·沃特森...... – SANDEEP 2013-05-10 06:21:09

6

你的檢查應該是:

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

首先檢查,如果附件爲空,然後lenght,因爲你正在使用&&這將導致short-circut evaluation

&& Operator (C# Reference)

的conditional- AND運算符(& &)執行邏輯「與」操作bool 操作數,但只在必要時纔會評估其第二個操作數

以前你喜歡的條件:(Attachment.Length > 0 && Attachment != null),因爲第一條件訪問屬性Length,如果Attachment爲空,你最終例外,隨着修改後的條件(Attachment != null && Attachment.Length > 0),它會檢查空第一和如果Attachment不爲空,則僅進一步移動。

+0

感謝感謝感謝哈比卜....這麼多。但你能告訴我什麼問題與以前的一個PLZ – SANDEEP 2013-05-10 06:20:42

+0

@SANDEEP,只是修改了答案,爲什麼你得到之前的例外 – Habib 2013-05-10 06:22:42

4

淨V 4.6或C#6.0

嘗試這個

if (Attachment?.Length > 0) 
+1

也許在5年我們的系統將認識到它...在我的4.6框架項目它仍然編譯作爲錯誤。 – HellBaby 2016-12-13 12:29:44

+1

@HellBaby然後您需要檢查與您的項目相關的語言。僅僅因爲你使用的是DotNet 4.6並不意味着你正在使用C#> = 6。你可能仍然在使用C#5。進入項目設置:右鍵單擊項目 - >屬性 - >生成 - >高級,並將語言顯式設置爲C#> = 6。 – 2017-11-20 18:58:17