Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von ClaraSoft
Thema: Abstrakte Klasse
Am Gestern, im Forum: Grundlagen von C#

Guten morgen

Sowas hört man gern. Trotzdem habe ich noch etwas anzumerken und zwar:


static void Main(string[] args)
        {
            Rechteck a = new Rechteck(10, 5);
            Quadrat b = new Quadrat(5);

            a.Umfang();
            a.Flaeche();

            b.Umfang();
            b.Flaeche();
        }
ist zwar in Ordnung aber hier solltest du deine Basisklasse Figur benutzen. Also statt "Rechteck a = new Rechteck(10, 5)", "Figur a = new Rechteck(10, 5)". Nachdem du Umfang und Flaeche den Rechtecks errechnet hast, kannst du a dann zu einem Quadrat machen mit "a = new Quadrat(5)". Alternativ könntest du auch mit einer Liste arbeiten.

Wenn du das gemacht hast sollte dir eigentlich ein Licht aufgehen.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Zitat von Abt
Die Zeitrange ist bewusst 30 Minuten.
Bei manchen Foren ist das auch nur 5. Bei anderen 60. Bei uns aktuell 30.

Interessant, sowas kenne ich aus anderen Foren leider nicht oder ich bin Foren unterwegs wo sowas kein Thema ist. In den meisten Foren in denen ich sonst noch rein schaue, könnte ich eigene Beiträge ewig weiter editieren.

Grüße

Thema: RestAPI oder vergleichbares
Am im Forum: Datentechnologien

Hallo,

Das sieht jetzt mehr wie JSON aus, wenn ich mir das im Browser anschaue.
Versuche jetzt mal statt JObject JArray

Grüße

Thema: Fragen zur Schnittstelle Sharp7 (C# - S7)
Am im Forum: Code-Reviews

Hallo,

Wenn etwas grün angezeigt wird, heißt das die Variable niemals verwendet wird. Auch ist diese Variable immer etwas ausgegraut. Wenn man mit der Maus darüber fährt wird das auch entsprechend im Popup angezeigt. Siehe Bild im Anhang.

Die Lösung wäre es die Variable zu verwenden wie es Alf vorgeschlagen hat, dann wird sie auch nicht mehr grün angezeigt.

Grüße

Thema: Zugriff auf Klasse mittels String-Variable
Am im Forum: Grundlagen von C#

Hallo,

Hast du dir mal die Klasse Dictionary<Tkey, TValue> angeschaut, damit dürftest du eher ans Ziel zu kommen, weil du dann dein Tuple nicht mehr in einer Liste wrappen müsstest.

Hier die Doku zu Dictionary:
Dictionary<TKey,TValue> Klasse (System.Collections.Generic)

Grüße

Thema: Anzahl Checkbox checked als Wert für for Schleife
Am im Forum: Grundlagen von C#

Zitat von Tommylik
Zitat
oder auf etwas Linq zurückgreifen

Ich denke wenn du auch schon Databinding empfiehlst sollte ich nicht mit Linq anfangen.
Was bedeuten eigentlich diese beiden Pfeile? Ich habe nachgelesen es sind Lambda Expression aber was sagen sie aus?

Mit den geposteten Linqquery kannst alle unchecked Checkbox aus dem Array herausfiltern, so dass nur noch die Checkboxen mit dem entsprechenden Index übrig bleiben, die checked sind.
Wenn dir die Lösung zu komplizierst ist, dann hat Bernd auch schon eine gepostet. Du kannst auch einfach über die Checkbox iterieren und prüfen ob eine Checkbox checked ist oder nicht nicht. Ein Objekt vom Typ Checkbox bsitzt eine boolean Variable Checked, die true oder false sein. Ist der Wert true ist die Checkbox markiert und false dann unmarkiert.
Zitat von BerndFfm

Ich würde das mit einem if machen :


CheckBox[] checkboxes = ...;
for (int i = 0; i < checkboxes.Length; i++)
    if (checkboxes[i].Checked)
    {
         ....
    }

Grüße Bernd

Thema: Parameter Count aus einer DLL Methode
Am im Forum: Rund um die Programmierung

Steht alles im Link beschrieben, den ich gepostet habe.

Thema: Parameter Count aus einer DLL Methode
Am im Forum: Rund um die Programmierung

Wenn du wirklich ein Plugin System bastelen möchtest, dann solltest du dir noch mal Gedanken über dein Konzept machen. So wie das aktuell ist, kann es nur nach hinten losgehen.

Dein Plugin sollte eine Schnittstelle haben, die das Programm, welches das Plugin nutzen möchte eindeutig versteht. Das kann man Besten über ein Interface machen, das dein Plugin implementiert und dein Programm laden kann. Dann musst auch nicht mehr die Parameter herausfinden, da alles mit einer eindeutigen Schnittstelle bekannt sein sollte für beide Seiten.

Hier noch etwas ausführlicher:
Erstellen einer .NET Core-Anwendung mit Plug-Ins - .NET

Thema: MySQL Where mit Wert aus WPF übergeben
Am im Forum: Datentechnologien

Es gibt da sowas das nennt sich Debugger, damit kannst deinen Code zur laufzeit Prüfen und sehen welches Object, welchen Wert gerade hat um das einfach auszudrücken. Desweiteren bekommst du bei einer Execption auch meistens die Info in welcher Zeit der Fehler auftaucht. Vermutlich taucht der Fehler bei den Objecten auf, die du mit null initiallisierst hast, was mich ehrlich gesagt auch nicht wundern wüde.

Thema: Get-Funktion zieht Wert nicht
Am im Forum: Grundlagen von C#

Zitat von chilic
Bist du sicher dass überhaupt eine Nullstelle berechnet wird?

So wie ich das sehe nein, bzw. er erzeugt 2 mal ein Objekt der Klasse Nullstellen. Einmal in der Methode button1_Click (Zeile 17) und dann in der Methode berechneNullstellen (Zeile 13). Dadurch ist auch kein Wunder das in Zeile 21 nichts zurück kommt, da in dieser Intanz alles 0 ist und auch nix gesetzt wurde. Er müsste eigentlich den Rückgabe Wert aus berechneNullstellen nehmen, das in Zeile 19 aufgerufen wird. Ob das dann funktioniert ist dann eine andere Frage.

Grüße


Thema: Jede Datei überprüfen - ggf. Dummy Datei erstellen.
Am im Forum: Grundlagen von C#

Hallo,

Die Methode GetFileName gibt aus einem gegebenen Pfad, den Dateinamen zurück oder anders gesagt du brauchst kein Aufruf an substring. Hättest du dir den Link angeguckt wäre dir das bestimmt aufgefallen, dort gibt es sogar ein Beispiel, dafür.

Grüße

Thema: DataBinding von 2 Sql-Tabellen welche mit einem Fremdschlüssel verbunden sind
Am im Forum: GUI: WPF und XAML

Zitat von Gasimodo
Mappe ich die Objekte aus der Datenbank auf ein neues Model? DTO: PlanMitKategorie indem ich über die Collections mit einer Schleife drüber gehe und die Werte in eine neue Collection speichere?
Hat jemand einen Denkanstoß wonach ich suchen soll?

Hallo,

Eine Schleife brauchst du eigentich nicht, du kannst die Daten direkt mit der Abfrage in die entsprechende Klasse mappen, mit SQL würde ich z.B. ein JOIN machen, mit Linq geht das auch.

Grüße


Thema: async Task<bool>
Am im Forum: Grundlagen von C#

Zitat von T-Virus
Ich würde die Prüfung auf die Länge des MainWindowTitle vor dem Contains machen.
Ist die Länge 0, dann kann man sich das Contains sparen, was du aktuell aber immer machst!
So macht man erst ein Contains, was false liefert nur um dann erst zu merken, dass dort eh nichts drin steh.
Bzw. würde ich anstelle der Länge mit String.IsNullOrEmpty prüfen, damit es klarer ausgedrückt ist.

Tatsächlich könnte man sich den Check auf die Länge des String sparen. Ein Contains liefert auch dann ein false, wenn nix in dem String steht. In seinem Code prüft er zuerst ob eine Zeichenfolge enthalten ist und wenn ja dann wird noch mal die Länge geprüft. Welches dann immer true zurück gibt.


Thema: async Task<bool>
Am im Forum: Grundlagen von C#

Hallo,

Eine kleine Anmerkungen zu deinen Code
Deine geschachtelte if Anweisung ist Redundant bzw. in dieser Form unnötig. Wenn das MainWindowTitle schon die Zeichenfolge "Programm -" enthält ist auch, auch gleichzeitig die Length größer als 0. Umgekehrt würde das ganze etwas eher Sinn machen. Noch besser wäre folgende Variante:


public async Task<bool> IsClientOnline()
        {

            await Task.Delay(2000);

            foreach (Process p in Process.GetProcesses())
            {

                if (!p.MainWindowTitle.Contains("Programm -") || p.MainWindowTitle.Length == 0)
                {
                     continue; // oder etwas anderes
                }
                 var username = p.MainWindowTitle;
                ClientName.Items.Add(username.Remove(0, 6));
                ClientHandleNr.Items.Add(p.MainWindowHandle);
                return true;

            }

                return false;

        }

Thema: 2 MySql Inserts - ID von Insert 1 in Insert 2
Am im Forum: Datentechnologien

Hallo

Last Insert Id hat aber einige Fallstricke die man beachten sollte.
Ich habe das bei mir lokal auf Php My Admin ausprobiert. Zum Beispiel habe ich nur dann eine ID bekommen, wenn im gleichen SQL auch z.B. ein Insert durchgeführt habe. Habe dagegen nur:


SELECT LAST_INSERT_ID()

ausgeführt kam bei mir eine 0 zurück. Bedeutet LAST_INSERT_ID nur dann die korrekte ID zurück gibt, wenn du bei Query mit der selben Verbindung ausführst. Dann musst du sicher stellen, das dir niemand dazwischen funkt mit einem Insert oder Update.

Eventuell wäre ein Insert select eine bessere und sichere Variante. https://mariadb.com/kb/en/insert-select/

Grüße

Thema: Parsen von JSON-formatierten RKI-Daten
Am im Forum: Netzwerktechnologien

Hallo,

Json parsen ist eigentlich kein Hexenwerk, außer man heißt Rockstar. Ich würde das Json erstmal vernüftig formattieren, damit ich besser sehen, was für Keys vorhanden sind, dazu eine passende Modelklassen erstellen/erzeugen.

Grüße

Thema: [gelöst] Aus mehrere XML Dateien Daten extrahieren
Am im Forum: Datentechnologien

Ich habe so den Verdacht das die XML Dateien leicht unterschiedlich aufgebaut sind und manchmal Werte vorkommen und manchmal halt nicht. Ich denke der Fehler auch schon ab einer Datei auftauchen wird und zwar dann, wenn es kein "Displacement" Wert in der XML Datei gibt. Hast du mal jede XML Datei einzeln geprüft und eingelesen?

Thema: HTML-String als Download bereitstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Ich weiß weder was deine Consolenanwendung macht noch wofür du sie brauchst, noch ist mir nicht ganz klar was mit du mir "HTML-String" meinst, Hyperlink zu einer Website vielleicht?
Darüber mehr zu erfahren wäre nicht schlecht, damit man dir besser helfen kann, deine Codezeile sagt rein gar nix aus.



Thema: Wie kann SelectionChanged einer ComboBox aus einer ListBox behandelt werden?
Am im Forum: GUI: WPF und XAML

Hallo,

Die ComboBox hat die Property SelectedIndex. Hast du es mal damit versucht?

Grüße

Thema: STAThreadAttribute beim ScrollViewer
Am im Forum: GUI: Windows-Forms

Ich würde dir eher zu WPF mit MVVM raten, da kommst du gar nicht erst in die Situation GUI Elemente im Code zu erzeugen, da die Ganze GUI mit XAML erzeugt/erstellt wird.

Thema: MySQL mehrere Werte auslesen und als String wiedergeben
Am im Forum: Datentechnologien

Hallo,

Gibt es zur der Exception auch ein Stacktrace? Und wie baust du den die Verbindung zur Datenbank auf, dein Login Objekt scheint zwar eine MySqlConnection zu haben, aber wie sieht der Connection State aus, ist der auf Closed? Ist der string externalip gesetzt?

Außerdem solltest du noch mal dein SQL Befehl anpassen. Statt mit * solltest du die Spalten explizit angeben, diesem Fall wäre das username und group. Ganz davon abgesehen solltest du noch ein Try Catch Block einbauen.

Ich würde dir mal empfehlen dir mal Dapper anzugucken.

Grüße

Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#

Hallo,

Ich habe die Methode inzwischen etwas umgeschrieben. Die gegenüberliegenden Ampeln sollten synchron miteinander laufen. Die Methode GetCurrentComtrolles() gibt die jeweils gegenüberliegenden Ampeln zurück je nachdem wie der wert von isNorthSouth ist. Dadurch werden jetzt bei jedem Event nur 2 Ampeln geschaltet außerdem habe ich nun einen kurzen Augenblick wo alle Ampeln Rot sind.

Eigentlich ist das Thema abgeschlossen, weil mein eigentliches Problem gelöst ist.


 private void ElapsedEvent(object send, System.Timers.ElapsedEventArgs args)
        {
            try
            {
                var controllers = GetCurrentControllers();
                foreach (var item in controllers.Select((v, i) => new { controller = v, index = i }))
                {
                    switch (item.controller.CurrentPhase)
                    {
                        case TrafficPhase.RedPhase:
                            item.controller.SwitchPhase(TrafficPhase.RedYellowPhase);
                            FireEvent(item.controller, "Activate redsignal and yellowsignal");
                            timer.Interval = 2000;
                            break;
                        case TrafficPhase.RedYellowPhase:
                            item.controller.SwitchPhase(TrafficPhase.GreenPhase);
                            FireEvent(item.controller, "Activate greensignal");
                            timer.Interval = 10000;
                            break;
                        case TrafficPhase.YellowPhase:
                            item.controller.SwitchPhase(TrafficPhase.RedPhase);
                            FireEvent(item.controller, "Activate redsignal");
                            if(item.index == 0) 
                            {
                                isNorthSouth = !isNorthSouth;
                            }
                            timer.Interval = 1000;
                            break;
                        case TrafficPhase.GreenPhase:
                            item.controller.SwitchPhase(TrafficPhase.YellowPhase);
                            FireEvent(item.controller, "Activate yellowsignal");
                            timer.Interval = 2000;
                            break;
                        default:
                            break;
                    }
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception: {ex}");
                throw;
            }
        }

Thema: Speichern und Laden eines 2dArrays
Am im Forum: GUI: WPF und XAML

Hallo

Mir fallen spontan 2 Punkte auf, die etwas komisch sind. Du liest den Filestream in der Load Methode nie. Und zum anderen könnte es bei deiner Save und deiner Load Methode knallen, wenn das Array kleiner ist als die die Schleifen durchläufe -> IndexOutOFRangeException. for schleifen sollten idr so aussehen:


for(int i =0; i < myArray.Length; i++) 
{
 // your code...
}

Daneben würde ich bei Load das Array zurück geben statt, als zu referenz übergeben. Und selbst wenn du lasse so lassen möchtest gib wenigstens ein boolean zurück, aber nicht void.

Grüße

Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#



Danke Abt, das war der entscheidene Hinweis. Ich hab mein Code um eine try/catch blog erweitert und es kam der erwartete Fehler im log.

Danke euch für eure Hilfe.


Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#

Hallo,

Ja das ist prinzipel richtig. Die foreach schleife habe ich, weil die Ampelanlage 4 Ampeln steuern soll, diese habe ich aktuell in einem Dictionary drin. Um die Phase zu wechseln muss ich einmal alle Ampeln aufrufen.

Ich habe im groben folgende Klassen:

  • Klasse für ein Lichtsignal mit den Properties für die Farbe, Status und Pin
  • Klasse für eine Ampel mit 3 Lichtsignale für Rot, Gelb und Grün
  • Controller Klasse für eine Ampel
  • Klasse welche die Gesamtanlage steuert und die Controller Klassen aktuell in einem Dictionary hält

Mein geposteter Code ausschnitt kommt aus der letzten Klasse.

@T-Virus:

Ja Laut Konsolen ausgabe scheint er nur einmal durch die Schleife zu gehen.
Log mit aktiven Switch Case:

Key count: 4
Current Key: North
Phase: RedPhase
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9 send message: Activate redsignal and yellowsignal and has phase: RedYellowPhase
Key count: 4
Current Key: North
Phase: RedYellowPhase
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9 send message: Activate greensignal and has phase: GreenPhase

Log ohne Switch Case:

Key count: 4
Current Key: North
Phase: RedPhase
Controller: 6d48cfb3-32e6-4e91-84a8-9e0419201c01
Current Key: East
Phase: RedPhase
Controller: 59b02032-bcca-44d2-990f-07b1dfd99476
Current Key: South
Phase: RedPhase
Controller: b7736796-010f-437d-9ebf-482e73622941
Current Key: West
Phase: RedPhase
Controller: 83581af1-15b4-4e2f-b81c-d00b9208ce46
Key count: 4
Current Key: North

Das läuft Übrigens auf dem Raspberry.

Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#

Hallo

Ich bin gerade dabei eine Ampelsteuerung für mein Raspberry PI zu programmieren. Jetz bin ich auf ein Problem gestoßen, das ich irgendwie nicht verstehe. Von meinen Timer wird folgendes aufgerufen:


private void ElapsedEvent(object send, System.Timers.ElapsedEventArgs args)
        {
            var keys = currentPhase.Keys;
            Console.WriteLine($"Key count: {keys.Count}");
            foreach (var key in keys)
            {
                Console.WriteLine($"Current Key: {key}");
                var phase = currentPhase[key];
                var controller = trafficLightControllers[key];
                Console.WriteLine($"Phase: {phase}");
                Console.WriteLine($"Controller: {controller.ControllerGuid}");
                switch (phase)
                {
                    case TrafficPhase.RedPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.RedYellowPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate redsignal and yellowsignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 2000;
                        break;
                    case TrafficPhase.RedYellowPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.GreenPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate greensignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 10000;
                        break;
                    case TrafficPhase.YellowPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.RedPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate redsignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 5000;
                        break;
                    case TrafficPhase.GreenPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.YellowPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate yellowsignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 2000;
                        break;
                    default:
                        Console.WriteLine($"Undefined: {key} or {phase}");
                        break;
                }
            }
        }

Das Problem ist jetzt das der Switch Case dafür sorgt das die Foreach Schleife nicht richtig durchlaufen wird. Es wird immer nur das erste Element durchlaufen.
Der Sowohl currentPhase als auch trafficlightControllers sind Dictionarys mit dem selben Key Typ.
Nehme ich den Switch case raus, funktioniert meine Foreachschleife Problemlos. Im www konnte dazu nix finden. Ich wollte einfach wissen ob das verhalten richtig mit dem Switch Case und der Foreach Loop richtig ist.

Thema: Array in Methode auslagern
Am im Forum: Grundlagen von C#

Ist das nur zur Übung gedacht oder soll das Irgendwo eingesetzt werden?
Fals letzteres zutrifft lass es bleiben und setze implementiere z.B. RSA oder AES oder etwas vergleichbares, dafür gibt es fertige Libarys.

Zu deinem Code:
Versuche weniger globale Variablen zu nutzen.
Sowohl die Crypt als auch die Decrypt Methode sollten statt void etwas zurück geben und einen Übergabe Parameter haben.

Hier mal ein Beispiel wie so eine Methode aussehen könnte:


public int Calculate(int x, int y)
{
     return x * y;
}
Die Methode erwartet 2 ints und gibt das Ergebnis zurück.

Thema: Vier gewinnt auswertung
Am im Forum: Code-Reviews

Zitat von chilic
Zum Beispiel könntest du eine Zeile (Spalte, Diagonale) komplett durchlaufen, dir merken wie viele gleiche Farben du bis zur aktuellen Position schon hintereinander gefunden hast und wenns die vierte mit gleicher Farbe ist, ist das Spiel zu Ende.

In meinen Vier gewinnt Spiel, zähle ich die gefunden Steine. Sind 4 gefunden springe ich raus.
Den Counter zurücksetzen tue ich nach jeder Spalte oder wenn ich eine andere Farbe gefunden habe

Hier meine umsetzung für den Vertikal Check.


private GameStatus CheckVertical(FieldStatus coincolor, FieldStatus[,] fieldstatus)
        {
            int counter = 0;
            for (int col = 0; col ≤ 6 ; col++)
            {
                for (int row = 0; row ≤ 5; row++)
                {
                    if (fieldstatus[row, col] == coincolor)
                    {
                        counter++;
                    }
                    if (fieldstatus[row, col] != coincolor)
                    {
                        counter = 0;
                    }
                    if (counter == 4)
                    {
                        return GameStatus.GameFinished;
                    }
                }
                counter = 0;
            }
            return GameStatus.UserEnabled;
        }

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Hallo,

Mein Ansatz wäre das IValueConverter Interface zu implementieren.

Grüße

Thema: Wieso stoppt Windows Dienst nach erster Ausführung?
Am im Forum: Rund um die Programmierung

Ich nutze Dependency Injection um meinen Logger zu bekommen. Dafür nutze ich das Interface ILogger<T>, was eigentlich sogar der standard Weg ist bzw sein sollte. Den kann ich sogar mit NLog konfigurieren. Ob der auch mit Serilog konfigurierbar ist weiß ich nicht.


private readonly ILogger<MqttSubcriptionWorker> logger;

public MqttSubcriptionWorker(ILogger<MqttSubcriptionWorker> logger)
{
    this.logger = logger;
}