Autor Wątek: string[] args  (Przeczytany 3015 razy)

Offline sentes

  • Użytkownik

# Grudzień 01, 2006, 17:31:26
Mam taki problem który wygląda następująco : nie moge użyć tablicy args jeżeli nie zostanie zainicjalizowana i tu jest problem że nie moge sprawdzic czy został args zainicjalizowany jak nie zostanie zainicjalozwany(przynajmniej nie wiem jak) troche mi tu masło maślane wyszło i paradoks ale mam nadzieje, że ktoś mnie zrozumienie ;]

czyli nie moge takiej instrukcji wykonać:
if(args[0] != null) instrukcja...
a i dodatkowo chciałbym się spytać bo ostatnio przeszedłem z C++ na C#
czy np. taka instrukcja :
string[] array = new string[10]alokuje tą tablice na stercie??

Czy array jest wskaźnikiem(tak jak w c++) na pierwszy element tablicy??

No i narazie to wszystko licze na waszą pomoc ;]

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xion

  • Moderator
    • xion.log

# Grudzień 01, 2006, 18:25:43
Możesz sprawdzić długość tablicy, czyli liczbę jej elementów:

if (args.Length > 0) ...
W C# tablice są obiektami wewnętrznych klas pochodnych od System.Array. Czyli taka tablica jak ów string[] array jest referencją do pewnego obiektu (alokowanego jak najbardziej na stercie), który to zawiera elementy tablicy.
W przypadku tablicy string[] jest to nawet ciekawiej, bo łańcuchy znaków też są obiektami (tym razem System.String) i w tablicy trzymane są referencje do nich; właściwa zawartość jest w innym miejscu, również na stercie.

Na stosie w C# alokowane są wyłącznie typy bezpośrednie (podstawowe oraz struktury i wyliczenia), a tablicy nimi nie są (są referencyjne, czyli klasami, choć składniowo tego nie widać).
« Ostatnia zmiana: Grudzień 01, 2006, 18:28:53 wysłana przez Xion »

Offline KrystianD

  • Użytkownik
    • http://krystiand.net

# Grudzień 01, 2006, 20:08:17
Cytuj
Możesz sprawdzić długość tablicy, czyli liczbę jej elementów:

if (args.Length > 0) ...
Dla stałej tablicy jej dlugość jest zawsze taka, jak przy zaalokowaniu, więc tu będzie wynosić 10

sentes: Nie rozumiem jaki masz problem, przy alokowaniu tablicy:
string[] array = new string[10]Każdy jej element wynosi null, więc można sobie to bez problemu sprawdzić:
if (array[0] != null) { }
Może zarzuć troche więcej kodu

Jeżeli chodzi Ci o taką inicjalizaję:
string[] array;
if (array[0] != null) { }
To kompilator domyślnie wyrzuci błąd o użyciu niezainicjowanej zmiennej, więc sie nie skompiluje
« Ostatnia zmiana: Grudzień 01, 2006, 20:11:00 wysłana przez Krystian D. »

Offline Xion

  • Moderator
    • xion.log

# Grudzień 01, 2006, 20:42:46
array.Length owszem będzie wynosić 10, natomiast args.Length będzie liczbą elementów tablicy args. W args są argumenty programu, więc będzie ona liczbą argumentów programu.

Offline KrystianD

  • Użytkownik
    • http://krystiand.net

# Grudzień 01, 2006, 21:02:53
Racja, nie zauważyłem, że chodzi o argumenty uruchomienia programu  ;)

Offline Furby

  • Użytkownik

# Styczeń 25, 2007, 19:34:44
args zawsze istnieje wiec nigdy nie bedzie null'em

Offline khak

  • Użytkownik

# Styczeń 25, 2007, 22:12:12
Głupi żart:

public static void Main(string[] args)
{
    args = null;
    try {
        int l = args.Length;
    } catch (NullReferenceException e) {
        Console.WriteLine("O kuchnia! A mówili, że nigdy nie będę nullem...");
    }
}

Offline Furby

  • Użytkownik

# Styczeń 25, 2007, 22:18:51
wyjątkowo głupi, rozumiem ze ty tak robisz w swoich programach, reusing objects ;]

Offline counterClockWise

  • Użytkownik

# Styczeń 25, 2007, 23:37:46
Głupi żart:

public static void Main(string[] args)
{
    args = null;
    try {
        int l = args.Length;
    } catch (NullReferenceException e) {
        Console.WriteLine("O kuchnia! A mówili, że nigdy nie będę nullem...");
    }
}

Czepiasz się sformułowania "nigdy nie będzie nullem". Wiadomo, że programista to człowiek wyzwolony, może wszystko ;)
P.S. Będziesz miał warninga że zmienna 'e' i 'l' nigdzie nie jest używana :D

Offline khak

  • Użytkownik

# Styczeń 25, 2007, 23:58:37
Powtarzam... "Głupi żart". Czepiasz, to się Ty... Warningów. ;) Jest takie powiedzenie: "nigdy nie mów nigdy", które w programowaniu często się sprawdza. To wyżej, to sztuczny przykład na potwierdzenie tej tezy... W życiu zdarzają się sytuacje poważniejsze, bo ktoś założył, że "coś nigdy nie będzie...".