Noch ein "sinnvoller" Blog

Schlagwort: c#

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

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# – „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

© 2024 Paul's Blog

Theme von Anders NorénHoch ↑