2013-05-10 44 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