这里我下载了GetSourceAttachment方法的word文件。当这个方法返回空字节然后我的字节附件数组给出一个错误(对象引用没有设置对象的实例)。当我检查附件的长度如果条件然后它的给错误。任何人都可以帮我默认初始化字节数组然后检查长度。
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
{
}
答案 0 :(得分:69)
只做
if (Attachment != null && Attachment.Length > 0)
来自 && Operator
条件AND运算符(&amp;&amp;)执行其bool的逻辑AND 操作数,但仅在必要时才计算其第二个操作数。
答案 1 :(得分:16)
您必须更换测试顺序:
自:
if (Attachment.Length > 0 && Attachment != null)
要:
if (Attachment != null && Attachment.Length > 0 )
第一个版本首先尝试取消引用Attachment
,因此如果它为null则抛出。第二个版本将首先检查空值,并且只检查长度是否为空(由于“布尔短路”)。
答案 2 :(得分:11)
.Net V 4.6或C#6.0
试试这个
if (Attachment?.Length > 0)
答案 3 :(得分:7)
您的支票应该是:
if (Attachment != null && Attachment.Length > 0)
首先检查附件是否为空,然后长度,因为您使用的&&
将导致short-circut evaluation
条件AND运算符(&amp;&amp;)执行其bool的逻辑AND 操作数,但仅在必要时评估其第二个操作数。
以前您的条件如下:(Attachment.Length > 0 && Attachment != null)
,因为第一个条件是访问属性Length
,如果Attachment
为空,您最终会遇到异常,修改条件(Attachment != null && Attachment.Length > 0)
,它将首先检查null,并且仅在Attachment
不为null时才进一步移动。
答案 4 :(得分:0)
现在我们还可以使用:
if (Attachment != null && Attachment.Any())
与检查Length()> 0相比,对开发人员而言,Any()通常一目了然。与处理速度的差异也很小。
答案 5 :(得分:0)
在Android Studio版本3.4.1
if(Attachment != null)
{
code here ...
}