C# 8.0 changelog Preview

329

Nullable Reference Types

  • Is de variabele, parameter of return waarde van een reference, bedoeld als null of niet
  • Optionele waarschuwingen, als de variabele, parameter of return waarde, niet gebruikt wordt als oorspronkelijk bedoeld.

C# bevat reeds T? voor value types. Dit wordt nu uitgebreid naar reference types.

string? n = "world";
var x = b ? "Hello" : n; // string?
var y = b ? "Hello" : null; // string? or error
var z = b ? 7 : null; // Error today, could be int?

Meer info

Async Streams (a.k.a. foreach async)

De IAsyncEnumerable / IAsyncEnumerator is een nieuwe implementatie.

//vroeger
foreach (var i in enumerable)
//nieuw
foreach await (var i in enumerable)


var enumerable = ...;
foreach await (T item in enumerable)
{
   ...
}
//ConfigureAwait

foreach await (T item in enumerable.ConfigureAwait(false))
{
   ...
}
//async iterators
//oud
static IEnumerable MyIterator()
{
    try
    {
        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(1000);
            yield return i;
        }
    }
    finally
    {
        Thread.Sleep(200);
        Console.WriteLine("finally");
    }
}
//nieuw
static async IAsyncEnumerable MyIterator()
{
    try
    {
        for (int i = 0; i < 100; i++)
        {
            await Task.Delay(1000);
            yield return i;
        }
    }
    finally
    {
        await Task.Delay(200);
        Console.WriteLine("finally");
    }
}
Linq
IAsyncEnumerable result = from item in enumerable
                               where item % 2 == 0
                               select async
                               {
                                   await Task.Yield();
                                   return item * 2;
                               };

 

Meer info

Records

Naast class and struct types, komt record nu beschikbaar. Dit type is enkel bedoeld om een alternatief te bieden voor klasses die enkel gestructureerde data te loopen.

Records maakt gebruik van nieuwe features, genaamd caller-receiver parameters and with-expressions(*).

*with-expressions zijn een feature van C# 7.0. Zo is het mogelijk het volgende uit te voeren.

var companyDefault = new Person("webXpert", "www.webXpert.be");
//with expression
var companyFR = companyDefault with { Url = "www.webXpert.fr" };

 

Voorbeelden

Default Interface Implementations aka. Traits

Meer info

Op de hoogte blijven van de toekomst van c#, bekijk de C# Language design Repository

Bekijk de releasemap van c# 8.0