Noch ein "sinnvoller" Blog

Kategorie: Programmieren (Seite 1 von 2)

Alles rund ums Programmieren. Vornehmlich in C#

T-SQL – SmallDateTime vs. DateTime

Vor kurzem hatte ich die Aufgabe ein bestehendes Programm zu erweitern. Dabei ist eine Menge unter der Haube geändert worden um dem aktuellen Stand etwas mehr zu entsprechend. Nachdem die Umsetzung reif fürs testen war, ist mir etwas komsiches aufgefallen was ich mir erst nicht erklären konnte…

Weiterlesen

Visual Studio Color Scheme

TL;DR

Unter Tools > Options > Text Editor > C# > Advanced > Editor Color Scheme kann das Farbschema zwischen VS 2017 (Methodennamen sind weiß) und VS 2019 (Methodennamen sind gelb / gelblich) umgestellt werden.

Irgendwas stimmt hier nicht?!

Heute war ich dabei mir ein kleines Hilfsprogramm zu schreiben. Dabei ist mir aufgefallen, das irgendwas zwischen meinem privaten VS und dem von der Arbeit anders ist. Aufgrund der aktuellen Situation (Corona-Krise) hab ich mein Laptop von der Arbeit immer dabei. Also angeworfen das ding, Visual Studio gestartet und geschaut was anders ist. Und da war es, die Farben (bei beiden hab ich das Dark-Theme aktiv) der Methoden unterscheiden sich. Bei dem einen sind sie „gelb“ (oder was für eine Farbe das genau ist) und bei dem anderen weiß. Ich hab mich mittlerweile so an das gelb gewöhnt, das es mich an meinem privaten PC doch etwas gestört hat.

Wie so viele Einstellungen bei Visual Studio musste ich jetzt erstmal raus bekommen, wo genau der Unterschied lag. Nach einer kurzen Recherche (danke Google) hab ich die Option dann doch recht zügig gefunden.

Tools > Options > Text Editor > C# > Advanced > Editor Color Scheme

Der Unterschied ist zwar nicht groß, aber ich hab mich schon so dran gewöhnt, das es doch irgendwie komisch war, wo die Farben fehlten.

VS 2017 – Scheme
VS 2019 – Scheme

Visual Studio 2019 – Project Templates

Nachdem ich heute zwei kleine REST-Services für mein Server geschrieben hatte und noch einen zusätzlichen Service aufsetzen wollte hab ich mir gedacht, dass das ganze doch einfacher gehen muss als jedes mal wieder alle benötigten NuGet Pakete hinzuzufügen, die allgemeinen Klassen zu erstellen (naja eher Copy & Paste aus einem bestehenden Projekt) und so weiter.

Weiterlesen

C# – Lücken in int-Listen finden

Hat man z.B. eine Liste mit Ids und möchte prüfen ob es dort Lücken gibt, kann man das ganz einfach wie folgt tun:

Im ersten Schritt (Zeile 8) wird die Liste einmal sortiert. Anschließend wird das erste Element (Zeile 11) und das letzte Element (Zeile 13) aus der Liste entnommen. Danach wird die Anzahl der Elemente (Zeile 15) ermittelt.

In Zeile 18 wird danach eine neue, komplette Liste erstellt. Anschließend werden die beiden Listen (rangeList, originalList) miteinander verglichen um zu schauen wo Lücken vorhanden sind. Diese Liste wird am Ende zurückgegeben.

Beispiel

Gehen wir davon aus, das wir die folgende Liste vorliegen haben:

var tempList = new List<int> { 3, 9, 14, 15 };
  • Erste Element (Zeile 11): 3
  • Letzte Element (Zeile 13): 15
  • Anzahl Elemente (Zeile 15): 13

Mit diesen Werten wird jetzt eine neue Liste erstellt, welche bei 3 beginnt und insgesamt 13 Elemente enthält:

var rangeList = Enumerable.Range(first, count);
// Result: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15

Mit Except werden die beiden Listen jetzt mit einander verglichen. Als Ausgangspunkt wird hier die neu erstellte Liste genommen. Dagegen wird die original Liste gehalten. Als Ergebnis erhält man jetzt alle Einträge, welche in der neuen Liste (rangeList) vorhanden sind jedoch nicht in der originalen Liste (tmpList). Das Ergebnis sieht dann wie folgt aus:

var gapList = rangeList.Except(originalList);
// Result: 4, 5, 6, 7, 8, 10, 11, 12, 13

Das ganze ist jetzt relativ ausführlich geschrieben um einmal die einzelnen Steps zu verdeutlichen. Am Ende (Zeile 27) findet man aber noch mal einen kleinere Aufruf, so dass man sich die Zeilen 10 – 24 sparen kann.

return Enumerable.Range(originalList.First(), 
    originalList.Last() - originalList.First() + 1).
    Except(originalList).ToList(); 

C# – ZimLabs.Utility & ZimLabs.WpfBase – Version 0.1.0

Die Tage hab ich ein paar Änderungen an den Bibliotheken ZimLabs.Utility und ZimLabs.WpfBase vorgenommen und Version 0.1.0 veröffentlicht.

Änderungen

An der WPFBase wurde nur die Versionsnummer auf 0.1.0 gehoben, der Utility hab ich aber ein paar neue Funktionen spendiert. Alle Infos dazu findet ihr hier: ZimLabs – Changelog

Installation

Installieren könnt ihr euch die Bibliotheken wie gewohnt über den NuGet-Package Manager:

PM> Install-Package ZimLabs.Utility -Version 0.1.0
PM> Install-Package ZimLabs.WpfBase -Version 0.1.0

C# – „Objekte“ vergleichen

Möchte man zwei Objekte miteinander vergleichen kann man dies über die Equals-Methode machen. Bei primitiven Datentypen wir z.B. einem string, einem int, etc. ist dies auch recht einfach. Sobald man jedoch ein benutzerdefiniertes Objekt mit einem anderen vergleichen will, wird dies schon etwas komplizierter. Man könnte dies lösen, in dem man von dem Objekt die Equals Methode überschreibt und dort drin dann alle entsprechenden Prüfungen vornimmt. Bei vielen benutzerdefinierten Objekten in einem Projekt ist dies jedoch eine ziemliche Schreibarbeit. Mit Reflection kann man das ganze ein wenig abkürzen:

Wie man hier sehen kann, wird per Reflection durch jedes Property itteriert und geschaut ob die Werte übereinstimmen. Für relativ simple Objekte funktioniert dies auch sehr gut, komplizierter wird dies jedoch bei Objekten, welche wiederum benutzerdefinierte Objekte beinhalten. Hier wird wohl kein Weg daran vorbei führen, die Equals-Methode zu überschreiben.

C# – Listen vergleichen

Die Tage stand ich vor der Aufgabe, den Inhalt von zwei Listen miteinander zu vergleichen. Anfangs dachte ich, dass das mit einem einfachen „.Equals()“ geht. Leider musste ich schnell feststellen, dass dies nicht von Erfolg gekrönt war.

Weiterlesen

C# – Switch / Case mit „Bereich“

Eine schöne Alternative zum if ist ein switch Statement (Wann if oder wann ein switch Sinn macht lass ich hier erstmal bei Seite, gibts bestimmt schon genug Einträge im Netz zu).

Aber wie ist das, wenn ich z.B. einen „Bereich“ abfragen will? Mit nem if ist das ziemlich einfach und schnell gelöst. Seit C# 7 geht das ganze jetzt aber auch in einem switch Statement. Das ganze sieht dann so aus:

In diesem Beispiel wandel ich die Dateigröße (bytes) in eine „schönere“ Form um.

Hinweis:
long“ kann durch „var“ ersetzt werden und die Klammern hinter dem when sind auch nicht erforderlich. Ich hab sie aber mal da gelassen, damit man besser erkennen kann was vor sich geht. Wenn man es noch kürzer haben will, kann man den Variablenname (hier n) auch durch eine „Wegwerfvariable“ ersetzen. Das würde dann so aussehen:

C# – WPF und MVVM

Arbeitet man mit WPF wird man früher oder später mal über MVVM stolpern (ich geh jetzt mal nicht weiter auf MVVM ein, da es schon nen haufen Erklärungen im Netz gibt:) ).

Will man in WPF MVVM nutzen braucht man ein paar Vorbereitungen. So muss man z.B. das Interface INotifyPropertyChanged in seinem „ViewModel“ implementieren. Ein ehemaliger Kollege hat sich daher irgendwann mal ein NuGet-Paket zusammen gebastelt, was alles benötigte für ein MVVM Projekt mitbringt. Das Paket ist über die Zeit jedoch immer größer geworden und hat noch noch das eine oder andere nette Features spendiert bekommen.

Da ich aber oft einfach nur die Basiskomponenten für MVVM brauch, hab ich einmal eine abgespeckte Version von dem Projekt erstellt und auf NuGet veröffentlicht.

Wen das ganze mehr interessiert kann sich das ganze hier einmal genauer anschauen: https://github.com/InvaderZim85/WpfBase

Zum Installieren vom NuGet Paket einfach nach „ZimLabs.WpfBase“ suchen oder folgenden Befehl in die Konsole werfen:

PM> Install-Package ZimLabs.WpfBase -Version 0.0.2
« Ältere Beiträge

© 2024 Paul's Blog

Theme von Anders NorénHoch ↑