2012-09-21 9 views
9

Jak dokładnie jest string[] args wypełniona w C# głównej metodzie?Jak dokładnie jest napis "string [] argumenty" w C# głównej metody?

Na przykład, czy usunięto białe znaki? Czy któryś z elementów kiedykolwiek opróżnia ciąg znaków lub jest pusty? W jaki sposób obsługiwane są pojedyncze i podwójne cudzysłowy?

MSDN doesn't explain how a jedynie mówi

Parametrem metody Main jest tablicą String reprezentująca argumenty wiersza polecenia

+3

"Na przykład, czy pozbawiona jest białej przestrzeni?" - dlaczego nie spróbujesz? Zajmie to 1 minutę. – zerkms

+0

Jest tu trochę informacji, chociaż w tej dokumentacji nie pojawiają się spacje. http://msdn.microsoft.com/en-us/library/acy3edy3.aspx –

+0

Kolejna ciekawa lektura: http://stackoverflow.com/questions/6605956/what-happens-when-a-net-ap-ication-is- rozpoczęty –

Odpowiedz

4

Wierzę, że argumenty podane do głównej to te zwracane przez Environment.GetCommandLineArgs() po usunięciu pierwszej z listy. MSDN opisuje zaskakująco złożoną logikę dotyczącą ukośników odwrotnych:

Argumenty linii poleceń są rozdzielane spacjami. Możesz używać podwójnych cudzysłowów ("), aby uwzględnić spacje w argumencie, jednak pojedynczy cudzysłów (') nie zapewnia tej funkcji.

Jeśli podwójny cudzysłów występuje po dwóch lub parzystych liczbach ułamkowych, każda postępująca para ukośników jest zamieniana na jeden ukośnik odwrotny, a podwójny cudzysłów jest usuwany.Jeśli podwójny cudzysłów występuje po nieparzystej liczbie odwróconych ukośników, w tym po jednym, każda poprzednia para jest zamieniana na jeden ukośnik odwrotny, a pozostały ukośnik odwrócony jest usuwany; w tym przypadku podwójne cudzysłów nie jest usuwany.

Dzięki Christian.K w komentarzach.

4

Po uruchomieniu procesu, można przekazać ciąg jako swój argument. To, w jaki sposób są one rozmieszczone i podzielone zależy wyłącznie od Ciebie.

Więc jeśli za pomocą wiersza polecenia systemu Windows, został uruchomiony:

myexe.exe "Hello World" Joe Bloggs 

Twoja tablica będzie zawierać:

{"Hello World", "Joe", "Bloggs"} 

Ale to podzielić tylko w tej konkretnej drodze (zauważyć cudzysłowie Hello World są usuwane), ponieważ struktura .Net automatycznie je analizuje.

+1

To zależy od linii poleceń na zewnątrz ?! Okay, to interesujące. –

+1

Nie sądzę, że można przekazać tablicę ciągów w oknach. Możesz przekazać jeden ciąg znaków, a dzielenie zależy od wywoływanego procesu. Istnieją konwencje, jak je podzielić, ale one są po prostu tym. Osoba odwołująca się może wybrać inne zasady. | Sądzę, że jest inaczej w systemach jednotlenowych, ale nie jestem ekspertem w tej dziedzinie. – CodesInChaos

+0

Jestem całkiem pewny, że Windows używa argc + argv tak samo jak * nix. – PhonicUK

0

Parametry przekazywane do programu zależą od systemu operacyjnego.

Powinieneś przetestować argumenty dla pustych, pustych ciągów, rozebrać białe znaki i obsłużyć pojedyncze/podwójne cudzysłowy w twoim programie (jeśli to konieczne).

Powiązane problemy