2013-05-10 37 views
22

Burada GetSourceAttachment yönteminin word dosyasını indiriyorum. Bu yöntem boş baytları döndürdüğünde, sonra bayt Eklenti dizisi bir hata verir (Nesne başvurusu nesnenin ayarlanamadığı). Eğer koşulu varsa Ek'in uzunluğunu kontrol ettiğimde hata. Herhangi biri, bayt dizisini varsayılan olarak başlatmak için bana yardımcı olabilir, sonra uzunluğu kontrol edin.Bayt dizisi boş olarak nasıl kontrol edilir?

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 
{ 

} 

cevap

51

sadece koşullu ve operatörü (& &) gerçekleştiren && Operator

kaynaktan

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

yapmak mantıksal-ve onun BOOL işlenen, bir ancak ikinci işlenen değerlendirir Eğer gerekliyse.

12

Sen testin sırasını takas gerekir:

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

için: Nereden

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

ilk sürümü girişimleri dereference Attachment ilk ve bu nedenle eğer atar bu boş. İkinci versiyon nullness'i ilk önce kontrol edecek ve sadece boş değilse ("boolean short-circuiting") uzunluğunu kontrol etmek için devam edecektir.

+0

Teşekkür Matthew Watson ... – SANDEEP

6

Kişisel çek olmalıdır:

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

İlk onay o short-circut evaluation

&& Operator (C# Reference)

conditional- neden olacaktır Eğer && kullandığınız beri Eklenti, geçersiz ve ardından uzunluğu ise VE işleci (& &) mantıksal bir AND'yi ( ) gerçekleştirir işlenenler, ancak yalnızca gerekirse ikinci işleneni olarak değerlendirir.

Daha önce sizin gibi rahatsızlığı vardı: İlk koşul özelliği Length erişen beri (Attachment.Length > 0 && Attachment != null) ve Attachment boş ise, değiştirilen koşul (Attachment != null && Attachment.Length > 0) ile, birinci sıfır kontrol edecektir, istisna ile bitirmek ve Yalnızca Attachment boş değilse daha da ilerler.

+0

Teşekkür Teşekkür Teşekkür Habib deneyin.ama önceki bir plz – SANDEEP

+0

@SANDEEP ile bir sorunun ne olduğunu söyle, sadece cevabı değiştirdim, neden – Habib

4

.Net V

4,6 VEYA C# 6.0 Çok .... Bu

if (Attachment?.Length > 0) 
+1

'dan önce istisna alıyordunuz Belki 5 yıl içinde sistemlerimiz bunu fark edecek ... 4.6 framework projemde hala derler bir hata olarak – HellBaby

+1

@HellBaby daha sonra projenizle ilişkili dili kontrol etmeniz gerekiyor. Sadece DotNet 4.6 kullanıyorsanız, C#> = 6 kullandığınız anlamına gelmez. Bildiğiniz herkes için hala C# 5 kullanıyor olabilirsiniz. Projenizin ayarlarına gidin: Projeye sağ tıklayın -> Özellikler -> İnşa -> Gelişmiş ve dili açıkça C#> = 6 olarak ayarlayın. –

İlgili konular