45

我正在下载GetSourceAttachment方法的word文件。当此方法返回空字节时,我的字节Attachment数组会出错:

对象引用未设置对象实例

Attachment当我检查inif条件的长度时,它会给出错误。

谁能帮我默认初始化字节数组,然后检查长度?

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
{

}
4

7 回答 7

91

做就是了

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

来自&& 运算符

条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数。

于 2013-05-10T06:19:32.767 回答
20

您必须交换测试的顺序:

从:

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

至:

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

第一个版本首先尝试取消引用Attachment,因此如果它为空则抛出。第二个版本将首先检查是否为空,并且仅在长度不为空时才继续检查长度(由于“布尔短路”)。


[编辑] 我来自未来告诉你,在更高版本的 C# 中,你可以使用“空条件运算符”将上面的代码简化为:

if (Attachment?.Length > 0)
        
于 2013-05-10T06:17:57.010 回答
18

.Net V 4.6 或 C# 6.0

尝试这个

 if (Attachment?.Length > 0)
于 2016-11-14T08:59:38.627 回答
10

你的支票应该是:

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

首先检查附件是否为空,然后检查长度,因为您使用&&它会导致短路评估

&& 运算符(C# 参考)

条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数

以前你有这样的条件:(Attachment.Length > 0 && Attachment != null),因为第一个条件是访问属性Length并且如果Attachment为空,你最终会遇到异常,使用修改后的条件(Attachment != null && Attachment.Length > 0),它将首先检查空,如果Attachment不为空,只会进一步移动。

于 2013-05-10T06:18:18.750 回答
0

现在我们还可以使用:

if (Attachment != null  && Attachment.Any())

对于开发人员来说,Any() 通常比检查 Length() > 0 更容易理解。处理速度也几乎没有差异。

于 2019-11-13T05:04:39.397 回答
0

在 Android Studio 版本中3.4.1

if(Attachment != null)
{
   code here ...
}
于 2020-02-24T11:13:08.037 回答
0

我认为最好的 if 语句是:

if(Attachment  is { Length: > 0 })

此代码同时检查:附件的空值和长度

于 2021-09-08T11:42:38.467 回答