Laden...

Übergabe eines Arguments an mein Programm

Erstellt von dad0n vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.191 Views
D
dad0n Themenstarter:in
2 Beiträge seit 2008
vor 15 Jahren
Übergabe eines Arguments an mein Programm

Hallo liebe Community,

ich bin noch relativ neu was die Programmierung unter C# angeht. Wie jeder ambitionierte Programmierer versuche ich natürlich die Quellcodes die z. B. in Büchern vorkommen abzuändern um so den Ablauf besser zu verstehen.

Nun habe ich aber folgendes Problem:

Ich möchte meinem Programm bei Start ein Argument übergeben (z. B. Beispiel.exe -h), was dann z. B. eine Hilfe anzeigt.

Hier nun mein Quellcode:


using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
  class Hauptprozedur
  {
    static void Main(string[] args)
    {      

		if (string s in args = "-h")
		Console.WriteLine ("Hilfe");
	        Console.ReadLine();
	         else Console.WriteLine ("Kein Argument");

	}
  }
	
	
}

Nun meldet mir Mono (Linux Pendant zu Visual Studio 2005) bei der Compilierung folgenden Fehler:

Expecting `;'(CS1002)]

Dieser Fehler liegt in der Zeile
if (string s in args = "-h")

Allerdings bringt das geforderte Anfügen des ";" nichts.

Jemand eine Idee was ich falsch mache?

Liebe Grüße und Danke im Voraus.

738 Beiträge seit 2007
vor 15 Jahren
if (args[0] == "-h")
    ....

wenn nur der erste Parameter ein -h sein kann, oder

foreach(string x in args)
{
     if (x == "-h")
        ....
}
D
dad0n Themenstarter:in
2 Beiträge seit 2008
vor 15 Jahren

Wow vielen Dank für die prompte Antwort!

Manchmal kann die Lösung so einfach sein und man kommt doch nicht drauf 🙂

Also nochmal danke.

Grüße

dad0n

1.378 Beiträge seit 2006
vor 15 Jahren

Ich packe dazu das Array gerne in eine List<String> mit

List<String> arguments = new List<String>(args);

und danach kann man bequem per

arguments.Contains("einWert")

prüfen, ob ein argument vorhanden ist.

Lg XXX

S
162 Beiträge seit 2008
vor 15 Jahren

Für die einmalige Verwendung genügt auch


            if (args.Contains<string>("some text"))
                //do something

Gruß
s-sharp

1.378 Beiträge seit 2006
vor 15 Jahren

Ja jetzt mit dem 3.5 Framework geht das auch so... man brauch nicht einmal den generischen Parameter, da der sich automatisch aus dem typisiertem Array ergibt.

4.221 Beiträge seit 2005
vor 15 Jahren

args[0] ist immer der volle Pfad des Exe.

Somit hättest Du auf args[1] abfragen müssen...

Tipp: schon mal args in ein Watch-Fenster gezogen ?... dann hättest Du selber gemerkt wo was drin ist... und dieser Thread wäre nie entstanden.

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

4.939 Beiträge seit 2008
vor 15 Jahren

In C bzw. C++ ist das so, aber nicht in C#. Dort stehen in args wirklich nur die Parameter...

Tipp: schon mal args in ein Watch-Fenster gezogen ?... dann hättest Du selber gemerkt wo was drin ist... und dieser Thread wäre nie entstanden. 😁

4.221 Beiträge seit 2005
vor 15 Jahren

@Th69

Das wäre dann aber neu in Version 3.5 oder 3.0 oder 2.0...

In 1.1 war es so wie ich es beschrieben habe.

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

4.939 Beiträge seit 2008
vor 15 Jahren

Ok, kann sein dass es bei Konsolenapplikationen so ist, bei GUI-Anwendungen definitiv nicht.

Ich habe bisher noch keine einzige C# Konsolenanwendung geschrieben, aber in der MSDN steht folgendes:

Anders als bei C und C++ wird der Name des Programms nicht als erstes Befehlszeilenargument behandelt.

4.221 Beiträge seit 2005
vor 15 Jahren

Es kann sein, dass wir auf unterschiedlichen Baustellen arbeiten.

Ich mache immer ein Main ohne Parameter... hole mir dann die CommandLineArgs mit Environment.GetCommandLineArgs()

Und in diesen Args ist dann 0 der volle Pfad des Exe. (und zwar auch bei Winforms)...

Kann sein, dass im Main die Args ohne den Pfad des Exe übergeben werden.

Gruss
Programmierhans

PS: Ich mache dies immer so, da ich zum Teil an anderen Stellen der Anwendung (nicht im Main) auf diese Args zugreifen muss...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...