The New C# 6.0 Language Features Explained

I am a professional and passionate software developer and have been using the Microsoft :NET platform for more than a decade now.

A few months ago the new C# compiler was released which supports the new language version C# 6.0.

The following video which I recorded “wiff ze German English accent” I explain some of the new syntax features.

Below the video on Youtube – but here as well – you’ll find the time indices at which a new feature begins:


Read more

Yield return & using IDisposable

Deutsche Version

“Yield return” is a powerful and handy statement if you want to quickly and easily an iteratable list without creating an Array or a List first:

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

The .NET compiler then creates the necessary IEnumerable- and IEnumerator-implementing classes and the state machine in the background and everything is fine and clear.
Read more

Linq: Split()

Deutsche Version

Terminator T1000

So you know the Cinderella saying “The good ones go into the pot, the bad ones go into your crop.”?

Well, .NET Linq does have a solution for either one, it’s called Where(). If you use that, your solution probably looks like this:

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

But it does not have a solution for both. So I wrote myself one:

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

WPF: MVVM & Responsive UI

Deutsche Version

A few days ago I wrote about my first tumbling steps into the world of WPF & MVVM.

Now a friend of mine – who’s been working in that very field – has challlenged me:

a) My GUI should remain responsive while the merge is being executed.

b) I should not re-evaluate the entire GUi after every single user action.

Read more

My GetService Pattern

In .Net the Interface System.IServiceProvider is a simple and elegant method to query services from other objects without having – or even wanting – to know how the class structure behind it looks like. Is the interface at that class implemented or at another? No matter, you query IServiceProvider and you get an instance of what you asked for.

That’s the theory. In reality the developer may have forgotten to add the new interface to the list after he implemented it. Or he forgot the IServiceProvider altogether.

That’s why I have this method to get what I want through several fallback strategies:

Read more

My XmlSerializer Pattern

The idea behind the .NET System.Xml.Serialization.XmlSerializer class is that you can easily serialize an XML file into a class tree and vice versa.

If you’re using XML Schema files, the xsd.exe tool can create that class tree for you.

But for simple applications you don’t even need a schema. You simply create a class that has public properties of simple types or complex types that in turn contain simple types.

Then you can throw this object into the XmlSerializer and you’re done. 🙂

Here’s my personal XmlSerializer coding pattern for a simple list of settings:

Read more

C# CodeDom Inline Compiling

I was a bit bored just now and since the WYSIWYG editor of WordPress 2.9.2 doesn’t work as optimal as I had hoped, I decided to write my own program that translates forum posts with BB code into HTML.

Of course I could have put all these replace functions into the code but then I would have to adapt the code every time I find a new tag.

So I thought this might be a good time to toy with the Inline Compiler of C#. And if done right, it is relatively easy.

Here’s my first Inline Compiling Code Snippet (it doesn’t contain any error handling and some such, but you get the idea how it works):

Read more