2013-05-10 29 views
22

ở đây im tải xuống tệp từ cho phương thức GetSourceAttachment.khi phương thức này trả về các byte trống thì mảng Tệp đính kèm byte của tôi đưa ra lỗi (Tham chiếu đối tượng không được đặt đối tượng của đối tượng) .khi kiểm tra độ dài của phần đính kèm trong điều kiện thì nó sẽ cho lỗi. bất cứ ai có thể giúp tôi để mặc định khởi tạo mảng byte sau đó kiểm tra chiều dài.Làm thế nào để kiểm tra mảng byte trống hay không?

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 
{ 

} 

Trả lời

51

Chỉ cần làm

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

Từ && Operator

Các điều kiện-AND (& &) thực hiện một logic AND của bool toán hạng của nó, nhưng chỉ đánh giá toán hạng thứ hai Nếu cần.

12

Bạn phải hoán đổi thứ tự của thử nghiệm của bạn:

Từ:

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

Để:

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

Những nỗ lực phiên bản đầu tiên để dereference Attachment đầu tiên và do đó ném nếu nó là vô giá trị. Phiên bản thứ hai sẽ kiểm tra nullness trước và chỉ tiếp tục kiểm tra độ dài nếu nó không null (do "boolean short-circuiting").

+0

Cảm ơn Matthew Watson ... – SANDEEP

6

Séc của bạn nên là:

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

Đầu tiên kiểm tra nếu tập tin đính kèm là null và sau đó chiều dài, kể từ khi bạn đang sử dụng && rằng sẽ gây ra short-circut evaluation

&& Operator (C# Reference)

Các conditional- Toán tử AND (& &) thực hiện logic AND của bool của nó toán hạng, nhưng chỉ đánh giá toán hạng thứ hai của nó nếu cần.

Trước đây bạn đã có điều kiện như: (Attachment.Length > 0 && Attachment != null), vì điều kiện đầu tiên là truy cập vào các tài sản Length và nếu Attachment là null, bạn kết thúc với các ngoại lệ, Với điều kiện biến đổi (Attachment != null && Attachment.Length > 0), nó sẽ kiểm tra null đầu tiên và chỉ di chuyển xa hơn nếu Attachment không phải là rỗng.

+0

Cảm ơn Cảm ơn Cảm ơn Habib .... Vì vậy nhiều.nhưng bạn có thể cho tôi biết vấn đề gì với một plz trước đây: – SANDEEP

+0

@SANDEEP, chỉ cần sửa đổi câu trả lời, vì lý do bạn nhận được ngoại lệ trước – Habib

4

Net V 4.6 HOẶC C# 6,0

Hãy thử này

if (Attachment?.Length > 0) 
+1

Có thể trong 5 năm hệ thống của chúng tôi sẽ nhận ra ... trong dự án khung 4.6 của tôi như một lỗi. – HellBaby

+1

@HellBaby thì bạn cần kiểm tra ngôn ngữ liên quan đến dự án của bạn. Chỉ vì bạn đang sử dụng DotNet 4.6 không có nghĩa là bạn đang sử dụng C#> = 6. Bạn vẫn có thể sử dụng C# 5 cho tất cả những gì bạn biết. Đi vào cài đặt của dự án của bạn: nhấp chuột phải vào dự án -> Thuộc tính -> Xây dựng -> Nâng cao và đặt ngôn ngữ rõ ràng thành C#> = 6. –

Các vấn đề liên quan