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.
if (args[0] == "-h")
....
wenn nur der erste Parameter ein -h sein kann, oder
foreach(string x in args)
{
if (x == "-h")
....
}
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
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
Für die einmalige Verwendung genügt auch
if (args.Contains<string>("some text"))
//do something
Gruß
s-sharp
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.
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...
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. 😁
@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...
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.
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...