Category: Software

.NET LinQ im Detail erklärt

.NET LinQ im Detail erklärt

Ich habe mal eine Videoserie erstellt, die genau im Detail erklärt, wie LinQ (Language-integrated Query) in .NET eigentlich genau funktioniert und auf welchen Mechanismen es aufbaut.

Denn nur wenn man weiß, wie was auf einem Raumschiff funktioniert, kann man Khan besiegen! 😉

Am besten guckt man sich die folgenden Videos direkt bei Youtube in der höchsten Auflösung und als Vollbild an. Ab Video 2 habe ich dann auch die Schrift im Visual Studio selbst größer gemacht, zwecks besserer Lesbarkeit.

Kapitel 1: IEnumerable
Kapitel 2: Yield Return
Kapitel 3: Funktionsdelegaten
Kapitel 4: Extension Methods
Kapitel 5: LinQ: Where
Kapitel 6: LinQ: Select, Any, All, Count, Except, Take

Deshalb fangen wir damit an, das Interface zu untersuchen, den jede Liste, jede Collection in .NET implementiert: IEnumerable

Code aus diesem Video

Read More Read More

Die neuen C# 6.0 Sprachfeatures erklärt (Englisch)

Die neuen C# 6.0 Sprachfeatures erklärt (Englisch)

Ich bin hauptberuflich und auch leidenschaftlich Softwareentwickler und seit mehr als einem Jahrzehnt jetzt auf der Microsoft-Platform .NET unterwegs.

Vor ein paar Monaten kam dann auch die neue Version des C# Compilers heraus, der die neue Sprachversion C# 6.0 unterstützt.

Und in folgendem Video welche ich “wiff ze German English accent” aufgenommen habe, gehe ich Schritt für Schritt auf die wichtigsten neuen Syntax-Features ein.

Unter dem Video auf Youtube – aber auch hier – findet ihr die Zeitindices, an denen jeweils ein neues Feature beginnt:


Read More Read More

Visual Studio Projektdateien bearbeiten / Debugging MSBuild.exe

Visual Studio Projektdateien bearbeiten / Debugging MSBuild.exe

Let Me Edit

Bist du auch davon genervt, dass man jede direkte Änderung von .NET Projektdateien (.vsproj, .vbproj, .vcxproj) entweder nur in einem externen Texteditor machen kann, oder das Projekt in Visual Studio entladen muss, dann bearbeiten kann und dann wieder laden muss?

Wenn ja, dann guck dir mal die Visual Studio Extension LetMeEdit an.

Mit dieser kannst du die Datei live im Textmodus im Studio aufmachen, während sie weiterhin im Solution Explorer geladen ist:

Read More Read More

Windows 10: Sprachleiste in der Taskleiste deaktivieren

Windows 10: Sprachleiste in der Taskleiste deaktivieren

Windows 10, wie schon andere Windowse vor ihm, bringen die Sprachleiste mit. Mein Windows ist in Englisch gehalten, aber meine Tastatur bevorzuge ich in Deutsch. Für diese Arten von Benutzungen hat Microsoft die Sprachleiste erfunden.

Sprachleiste Windows 10

Normalerweise ist die Sprachleiste relativ einfach ausschaltbar – zumindest bisher. Da ich die Sprachen nicht wechsele, brauche ich sie eigentlich nicht.

In Windows 10 hat es aber eine Weile gedauert, ehe ich rausgefunden habe, wo man sie abschaltet. Hier ist das wie.

Das ist das Kontextmenü, wenn man auf die Sprachleiste klickt:

Kontextmenü Sprachleiste Windows 10

Vergiss es, das wäre ja zu offensichtlich. Hier findest du nicht, wonach du suchst.

Nun klicke rechts auf die Uhr!

Kontextmenü Uhr Windows 10

Da isses! Nun folge diesem Pfad:

Notifications Settings Windows 10

Input Indicator Windows 10

Fertig!

Yield return & using IDisposable

Yield return & using IDisposable

English Version

“Yield return” ist ein mächtiges und praktisches Statement, wenn man schnell und einfach eine iterierbare Liste erzeugen möchte, ohne erst großartig ein Array oder eine List anzulegen:

using System;
using System.Collections.Generic;
using System.Drawing;

class Program
{
    static void Main()
    {
        var colors = Rainbow;

        Console.WriteLine("colors.GetType(): {0}", colors.GetType());
        Console.WriteLine();

        foreach (Color color in colors)
        {
            Console.WriteLine(color.Name);
        }

        Console.ReadLine();
    }

    static IEnumerable<Color> Rainbow
    {
        get
        {
            yield return (Color.Red);
            yield return (Color.Orange);
            yield return (Color.Yellow);
            yield return (Color.Green);
            yield return (Color.LightBlue);
            yield return (Color.Indigo);
            yield return (Color.Violet);
        }
    }
}
Red
Orange
Yellow
Green
LightBlue
Indigo
Violet

Der .NET Compiler erzeugt dann im Hintergrund die notwendigen IEnumerable- und IEnumerator-implementierenden Klassen und die State Machine und alles ist fein und übersichtlich.

Read More Read More

Linq: Split()

Linq: Split()

English Version

Terminator T1000

Ihr kennt ja den Aschenputtel-Spruch “Die Guten ins Töpfchen, die Schlechten ins Kröpfchen.”?

Naja, .NET Linq hat eine Lösung für das Eine oder Andere, genannt Where(). Wenn man das benutzt, sieht die Lösung wahrscheinlich so aus:

var evens = list.Where(number => ((number % 2) == 0));
var odds =  list.Where(number => ((number % 2) != 0));

Aber es gibt keine Lösung für Beides. Also hab ich mir selbst eine geschrieben:

public static void Split<T>(this IEnumerable<T> source
    , Func<T, Boolean> predicate
    , out IEnumerable<T> trueList
    , out IEnumerable<T> falseList)
{
    trueList = source.Where(predicate);
    falseList = source.Except(trueList);
}

Read More Read More

WPF: MVVM & Responsive UI

WPF: MVVM & Responsive UI

English Version

Vor ein paar Tagen hatte ich ja von meinen ersten Gehversuchen im Bereich von WPF & MVVM berichtet.

Nun hat mich ein Kumpel, der genau dieses Feld schon eine ganze Weile beackert, vor eine Herausforderung gestellt:

a) Meine GUI sollte ansprechbar (“responsive”) bleiben, während der Merge ausgeführt wird.

b) Es soll nicht immer die ganze GUI nach jeder Aktion evaluiert werden.

Read More Read More

WPF: MVVM, ViewModel, Model & MessageBoxen

WPF: MVVM, ViewModel, Model & MessageBoxen

English Version

Ich bin nie ein GUI-Entwickler gewesen und man sieht es meinen Programmen auch an.

Wo ich gut drin bin, ist der BusinessLogic-Teil der Applikation.

Deshalb habe ich mich immer in vertrautem Territorium bewegt, wo man Controls schön an Linien ausrichten konnte und das dann halbwegs ordentlich aussah (wenn auch nicht schön).

Aber die Zeiten ändern sich und jetzt hab ich mich mal an das ganze Thema WPF (Windows Presentation Foundation) im Zusammenspielt mit MVVM (Model-View-ViewModel) gewagt.

Also Startpunkt habe ich ein Programm genommen, was ich eh schreiben wollte und damit als Übungsgrundlage perfekt geeignet ist.

In dem unten verlinkten ZIP-File findet ihr das Ergebnis. Es enthält ein klassiches Windows-Forms-Programm, welches als MVVM gestaltet ist, sowie das WPF-Pendant dazu.

Beide Programme greifen auf das gleiche Model zu, verwenden aber an ihre Bedürfnisse angepasste ViewModels.

Alle Zugriffe aus dem Model auf entweder die UI (z.B. File-Dialoge oder MessageBoxen) oder das Dateisystem wurden komplett weggekapselt und werden von den jeweiligen Clients des Models zur Verfügung gestellt.

Damit sollte das Programm auch komplett Unit-testbar sein, da alle Interfaces weggemockt werden können.

Das Ergebnis ist trotz allem relativ übersichtlich und sollte damit für Entwickler nachvollziehbar sein, die sich mit MVVM beschäftigen wollen.

MVVM.zip

Fortsetzung: WPF: MVVM & Responsive UI

Leserbriefe zum Spiegel 3/2014 "Spielen macht klug"

Leserbriefe zum Spiegel 3/2014 "Spielen macht klug"


“sie uns Spiele” muss natürlich entweder nur “dass sie uns” oder “dass uns Spiele” heißen. Sorry für den fauxpas.

Mein GetService Pattern

Mein GetService Pattern

In .Net ist das Interface System.IServiceProvider eine einfache und elegante Möglichkeit, Dienste von anderen Objekten abzufragen, ohne genau wissen zu müssen – oder gar zu wollen -, wie die Klassenstruktur dahinter aufgebaut ist. Ist das Interface in dieser Klasse implementiert oder in einer anderen? Egal, man fragt IServiceProvider und bekommt eine Instanz dessen, was man angefragt hat.

Soweit die Theorie. In der Praxis vergisst man als Entwickler dann aber vielleicht doch mal, ein weiteres Interface in die Liste aufzunehmen, sobald man es implementiert hat. Oder IServiceProvider wurde ganz uns gar vergessen.

Deshalb hier meine Methode, mit Fallback-Strategie dennoch zum gweünschten Ergebnis zu kommen:

Read More Read More