Ich steh momentan ganz auf dem Schlauch. Ich brauche die Befehlszeilenargumente in einer anderen Klasse. Dazu habe ich mir eine Klasse erstellt:
public class DBConfig
{
public int dbskip { get; set; }
public int dbcount { get; set; }
}
in der Main Methode habe ich dann folgenden Teil:
DBConfig db_config = new DBConfig();
if (args.Length == 2)
{
db_config.dbcount = Convert.ToInt16(args[0]);
db_config.dbskip = Convert.ToInt16(args[1]);
}
Nur kann ich von meiner Klasse aus nicht auf db_config.dbcount zugreifen. Wenn ich DBConfig db_config = new DBConfig(); oberhalb von main in die class Program schreibe kann ich von der Main nicht darauf zugreifen.
Wo ist der richtige Ansatz ?
Danke
Michael
Nur kann ich von meiner Klasse aus nicht auf db_config.dbcount zugreifen
Woran merkst du das?
an der Fehlermeldung > Fehlermeldung:
der Name db_config ist im aktuellen Kontext nicht vorhanden
Michael
Weil du die Variable db_config vom Typ DBConfig in der Main-Methode der Klasse deklarierst, ist sie auch nur innerhalb der Main-Methode verfügbar. Möglicherweise suchst du das hier: Felder, um die Variable über den Gültigkeitsbereich der Main()-Methode hinaus parat zu haben. Das wäre allerdings schon die Grundlage der Grundlagen und ein Anlass, sich erst einmal ein Buch zu schnappen und durch zu arbeiten.
Bitte auch [Artikel] C#: Richtlinien für die Namensvergabe beachten.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Dann zeig doch mal den Code so, dass auch daraus hervorgeht, wo was steht statt einer umständlichen Beschreibung dessen.
Ich kann mir zwar Situationen vorstellen, wo das passieren kann, aber keine Lust mir dann anzuhören "Nee, das ist bei mir anders!" nur weil ich dann nicht exakt die getroffen habe.
aber gerne doch:
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Timers;
namespace ApiCall
{
public class Program
{
private static System.Timers.Timer aTimer;
DBConfig db_config = new DBConfig();
static void Main(string[] args)
{
try
{
DBConfig db_config = new DBConfig();
if (args.Length == 2)
{
db_config.dbcount = Convert.ToInt16(args[0]);
db_config.dbskip = Convert.ToInt16(args[1]);
}
SetTimer();
Start().Wait();
Console.WriteLine("\nPress the Enter key to exit the application...\n");
Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
Console.ReadLine();
aTimer.Stop();
aTimer.Dispose();
Console.WriteLine("Terminating the application...");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadKey();
}
if (Debugger.IsAttached)
Console.ReadKey();
}
public static async Task Start()
{
Stopwatch watches = new Stopwatch();
watches.Start();
ApiFindingCall call = new ApiFindingCall();
var arrGesamt = await call.StartCall();
watches.Stop();
Console.WriteLine(DateTime.UtcNow.ToString() + " Auktionen eingetragen. Dauer: " + watches.Elapsed.ToString());
}
private static void SetTimer()
{
aTimer = new System.Timers.Timer(1000 * 300);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Task t = Start();
t.ContinueWith((str) =>
{
//Console.WriteLine(str.Status.ToString());
//Console.WriteLine("Main end");
});
t.Wait();
}
}
}
hier brauch ich dann die Werte:
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
namespace ApiCall
{
class ApiFindingCall
{
public async Task<string[,]> StartCall()
{
int dbskip = db_config.dbskip;
int dbcount = db_config.dbcount;
}
}
}
Es sollte
static DBConfig db_config = new DBConfig();
heissen.
Lege dein Config-Objekt als Member von "Program" an. Beachte aber, dass es statisch sein muss, sonst kannst du nicht darauf zugreifen.
In deiner Start-Methode übergibst du dann das Objekt an dein ApiFindingCall. - Danach hast du auch innerhalb dessen Zugriff auf die Konfigurationswerte.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Damit auch die kommenden Tage gerettet sind, empfehle ich einen Blick in [FAQ] Wie finde ich den Einstieg in C#? sowie in das OpenBook vom Rheinwerk-Verlag: 🛈
Weeks of programming can save you hours of planning
Besser wäre es die Config als Instanz via Methodenparameter zu übergeben und auf static zu verzichten.
static macht als Einsteiger i.d.R. mehr Probleme, als das es hilft.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
MrSparkle,
auch an Dich ein großes Dankeschön für diesen Hinweis.
Michael
Von Andreas Kühnel ist auch das Buch 'C#6 mit Visual Studio 2015' sehr zu empfehlen, damit du die Grundlagen wirklich verstehst
OO gibts seit Platon - hatte der auch C#?