2013-05-10 19 views
22

tutaj pobieram plik ze słowem dla metody GetSourceAttachment.Gdy ta metoda zwraca puste bajty wtedy mój bajt Tablica załączników daje błąd (Odwołanie do obiektu nie jest ustawioną instancją obiektu) .Kiedy sprawdzam długość załącznika w warunku, to jego podanie błąd. Czy ktoś może mi pomóc domyślnie zainicjować tablicę bajtów, a następnie sprawdzić długość.Jak sprawdzić tablicę bajtów pustą, czy nie?

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 
{ 

} 

Odpowiedz

51

Wystarczy zrobić

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

Od && Operator

Warunkowe-Operator AND (& &) wykonuje logiczną AND jego bool argumentów, ale tylko analizuje drugi argument Jeśli to konieczne.

12

musisz zamienić kolejność testu:

Od:

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

Do:

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

pierwszych prób Wersja do dereference Attachment pierwszy i dlatego rzuca jeśli jest zerowy. Druga wersja najpierw sprawdzi, czy jest ona zerowa i sprawdza tylko długość, jeśli nie jest zerowa (z powodu "zwarcia binarnego").

+0

Dzięki Matthew Watson ... – SANDEEP

6

Test powinien być:

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

Najpierw należy sprawdzić, czy załącznik jest zerowy, a następnie długość, ponieważ używasz && że spowoduje short-circut evaluation

&& Operator (C# Reference)

conditional- Operator AND (& &) wykonuje operację logiczną - AND jej bool operandy, ale ocenia tylko swój drugi operand tylko w razie potrzeby.

Wcześniej miałeś STAN: (Attachment.Length > 0 && Attachment != null), ponieważ pierwszy warunek jest dostęp do właściwości Length a jeśli Attachment jest pusty, możesz skończyć z wyjątkiem, ze zmodyfikowanym stanie (Attachment != null && Attachment.Length > 0), będzie to sprawdzić dla wartości null pierwszy i przesuwa się dalej, jeśli Attachment nie jest pusta.

+0

Dzięki Dzięki Dzięki Habib .... Tyle.ale czy możesz mi powiedzieć, jaki problem z poprzednim plz – SANDEEP

+0

@SANDEEP, po prostu zmodyfikowałeś odpowiedź, dlaczego dostałeś wyjątek przed – Habib

4

.Net 4.6 V lub C# 6,0

Try To

if (Attachment?.Length > 0) 
+1

Może za 5 lat nasze systemy to rozpoznają ... w moim projekcie ramowym 4.6, to wciąż kompiluje jako błąd. – HellBaby

+1

@HellBaby następnie sprawdź język związany z Twoim projektem. Tylko dlatego, że korzystasz z DotNet 4.6, nie oznacza, że ​​używasz C#> = 6. Możesz nadal używać C# 5 dla wszystkich, których znasz. Przejdź do ustawień projektu: kliknij prawym przyciskiem myszy projekt -> Właściwości -> Utwórz -> Zaawansowane i ustaw język jawnie na C#> = 6. –

Powiązane problemy