Oh, du hast Recht - ich habe mich da verlesen. Ich hatte interpretiert, dass die Eigenschaften der Klasse und das enum auf derselben Ebene liegen und nicht als Body Property..
Es gibt einige Möglichkeiten, wie du vorgehen kannst. Die von Abt geschilderte hätte eine Änderung der Datenstruktur zur Folge.
Eine andere wäre z.B. mithilfe von JsonObject (Docs) oder JsonDocument (Docs) und dem JSON DOM zu schauen, was der korrekte Typ ist.
Alternativen gibt es noch einige - eigene JsonConverter z.B.
Ohne einen Service registriert zu haben, wird dir beim erstellen der Component eine Exception erscheinen.
Du könntest einfach einen DesktopDialogService implementieren, der einfach nichts macht (oder das Äquivalent von den Dialogen auf Desktop Ebene darstellt).
was ist denn myDataStream für eine Datenquelle? Ist das ein Stream?
Wenn du dort aktuell nur eine 0 ausgelesen bekommst, wirst du einfach weiter lesen müssen und dann entweder an CurrentData appenden oder setzen müssen, damit weitere Daten auf deiner UI angezeigt werden.
Das Prinzip kannst du auch in WPF, UWP und WinUI3 verwenden.
Was für dich vielleicht sinnvoller ist, wäre das umgekehrte Prinzip. Versuch dich mal in der Microsoft Dokumentation in Dependency Injection einzulesen.
Wenn ich dich richtig verstanden habe, willst du in Abhängigkeit von einer Aktivierung o.ä. bestimmte Buttons aktivieren. Also besteht eigentlich keine Abhängigkeit der Visualisierung, sondern eine Abhängigkeit zu den Rechten des aktuellen Anwenders. Diese Rechte könntest du super in einem als Singleton gescopten Service verwalten und über Events oder Subscriptions die Visualisierung benachrichtigen.
sind das Listen mit gemischten Typen oder symbolisieren die "Listen" jeweils Objekte?
Sofern du gemischte Typen hast:
Erstelle dir eine Klasse/Record mit benannten Properties und füge von dieser jeweils eine Instanz (je eine Instanz für Liste 1, 2, 3) zu einer Liste hinzu. Dann kannst du auf der Basis aggregieren.
Vergleichen könntest du sie auf integer Basis (was etwas komplizierter ist, denn der Computer arbeitet auf binarbasis und du willst auf zehner basis vergleichen) oder auf string Basis.
Für den Anfang ist die string Variante vermutlich einfacher. Grob: Wandele die Zahl in einen string um, schaue für jeden char ab dem zweiten ob er gleich dem vorderen ist.
Du wirst die CSV Datenspalte parsen müssen. Beim einlesen ist es ja nur ein String.
DateTime (Docs) bietet dafür die statische DateTime.TryParseExact (Docs) Methode an, die auch ein Format entgegennimmt.
Ob du jetzt die Subsekunden Auflösung bei Bankauszügen benötigst sei dahingestellt aber DateTime kann diese auch verwalten.
Es gibt verschiedene fertige Libs, die das parsen von CSV vereinfachen. Da musst du dann nicht so viel selber programmieren. Auf Anhieb fällt mir CsvHelper ein.
Konkrete frage: Wie kann ich die lokale Methode (mit der Liste welche nur in Main-Classe verfügbar ist) von einer anderen Klasse (Splash) aufrufen?
ist, indem du entweder eine Statische Methode in der anderen Klasse erzeugst und diese aufrufst, oder in deinem Splashscreen eine Instanz der anderen Klasse erzeugst.
Das löst allerdings dein Problem - wenn, dann nur temporär - nicht.
Was du eigentlich möchtest ist eine saubere [Artikel] Drei-Schichten-Architektur und eine Initialisierung der Datenschicht.
Merkst du, dass das wahnsinnig kompliziert ist, so wie du es aufgebaut hast?
Generell baut man sich für soetwas ein Datenmodell (Grundlegend ist das in [Artikel] Drei-Schichten-Architektur erklärt), in dem Fall würde es reichen sich die Anzahl Tore zu in einem Feld zu speichern (ganz pragmatischer Ansatz) und dann jeweils nur das berechnete Ergebnis in das Textfeld zu schreiben oder gleich auf Datenbindung zu setzen, anstatt jedesmal den geschriebenen string wieder in eine Zahl zu parsen - was übrigens dazu führt, dass dein Programm abstürzt wenn dort einmal keine Zahl drin steht.
deine Frage ist recht allgemein formuliert und lässt deswegen viel Spielraum beim beantworten.
Das if statement erwartet in den Klammern einen Ausdruck, welcher einen boolschen Wert (also wahr oder falsch) ergibt. File.Exists gibt bereits einen boolschen Wert zurück, deswegen ist bei dem Ausdruck File.Exists() == true das == true überflüssig, File.Exists ist bereits true. Für false gilt dasselbe, nur eben mit einer negierung.
Wenn du nur prüfen möchtest, ob eine Datei existiert, dann würde also reichen:
if (File.Exists(nameBackup))
{
// datei existiert
}
else
{
// datei existiert nicht
}
Die Konvertierung von DateTime nach DateTimeOffset funktioniert über einen impliziten Cast.
Aus dem Quellcode von DateTimeOffset:
public static implicit operator DateTimeOffset(DateTime dateTime)
Die Konvertierung sorgt dafür, dass wenn du eine DateTime Objekt übergibts, dass als Kind "Local" ist, die Zeitzone des aktuellen, den Code ausführenden Systems an das neue DateTimeOffset objekt übergeben wird. Ist dein DateTime Objekt UTC, wird ein DateTimeOffset objekt mit Offset = 0 erzeugt.
Es kann dabei zu Problemen kommen, wenn du ein Datum auf einem System verarbeitest, dass in einer anderen Zeitzone steht und du dies nicht erwartest.
Ich würde nach Möglichkeit darauf verzichten DateTime und DateTimeOffset zu mischen.
ich habe selber keinen MAC, es gibt allerdings Technologien, die von .NET unterstützt werden aber nicht auf dem MAC lauffähig sind.
Das sind z.B. Windows Forms und WPF.
Die ARM Plattform von Apple wird auch "erst" mit .NET 6 unterstützt.
Wichtig, daß der Lokalisierungs Name Genau den selben Namen hat, wie die Enum selbst.
Wenn hier wieder Namen übereinstimmen müssen - wo ist dann die Typsicherheit?
Da müsste dann eher ein Quellcode Generator dazwischen, damit das wieder typsicher ist, sonst könnte mir passieren, dass ich den Enum Eintrag RedColour nenne und nichts geht mehr?
Wenn du nur nach Datum (und vermutlich Zeit) filterst, könntest du auf den Table Storage gehen. Der ist günstiger als Cosmos DB und bei richtig gewähltem PartitionKey und RowKey geht das einfache filtern auch sehr gut.
Direkt mit der Datenbank wirst du nicht um pollen (abfragen) herumkommen.
Bei solchen Anforderungen setzt man (idr. setzt man immer einen) (Web-)Service zwischen deine Programme und die Datenbank um dann mit Push-Technologien wie z.B. SignalR die Clients zu informieren.
Alles in Code Tags zu schreiben ist nicht so angenehm zu lesen
Siehst du den Unterschied zwischen Doku und deiner Implementierung? Du willst einen UInt-Pointer übergeben, erwartet wird ein LPCWSTR. Ein Int16 ist ein short in C#.
Das kommt natürlich auf die interne Datenrepräsentation an.. und kann auch eine Design Entscheidung sein.
Das was du siehst ist ja nur das Frontend der Software und was dort angezeigt wird oder auswählbar ist hat nichts mit dem zu tun, wie etwas hinterher abgespeichert wird.
Die Gewinnbedingung ist ja, dass drei gleiche Felder in einer Reihe sind. Wenn du also die einzelnen Felder durchgehst würde es reichen alle angrenzenden zu schauen und schauen ob diese übereinstimmen und der gegenüberliegende auch.
Du brauchst (ohne Optimierungen) also nur die inneren Felder durchlaufen und jeweils die angrenzenden Felder prüfen.
Schau dir das mal mit dem Debugger an.
Du greifst dort auf die Cells Eigenschaft einer Zeile zu, die alle Zellen der Zeile enthält.
Durch das ToString() erhälst du keinen Fehler, der Rückgabewert von ToString() ist aber vermutlich immer derselbe.