CSharp 7

De Banane Atomic
Aller à la navigationAller à la recherche

Literals

  • Écriture des entiers plus lisible
  • Écriture de nombres binaires

Pattern matching

Écriture simplifiée de as if != null

Csharp.svg
object o = 10;

// Ancienne écriture
int? i = o as int?;
if (i != null)
{
    j = i * 2;
}

// Nouvelle écriture
if (o is int i)
{
    j = i * 2;
}

Switch on types

Tuple: nouvelle écriture d'une méthode retournant plusieurs éléments

Out variables: déclaration inline du paramètre out

Csharp.svg
// ancienne écriture: déclaration du paramètre out avant son utilisation
int i;
bool b = int.TryParse("10", out i);

// Nouvelle écriture: le paramètre out est déclaré inline
bool b = int.TryParse("10", out int i);

Local function

Csharp.svg
public string MainMethod()
{
    string s = string.Empty;
    for (int i = 0; i < 10; i++)
    {
        LocalMethod(i);
    }
    return s;

    void LocalMethod(int i)
    {
        s += i.ToString();  // accès à la variable s définie dans la méthode englobante
    }
}

throw if null

Csharp.svg
private string _mp;
public string MyProperty
{
    get => _mp;
    set => _mp = value ?? throw new InvalidOperationException();
}

Return by reference

Csharp.svg
int[] numbers = { 1, 2, 3, 4 };
ref int v = ref Substitute(2);  // on récupère la référence de l'entier 2
v = 10;  // on modifie la valeur pointé par cette référence, ce qui modifie la valeur dans le tableau
Console.WriteLine(string.Join(", ", numbers));  // 1, 10, 3, 4

ref int Substitute(int value)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] == value)
        {
            return ref numbers[i];
        }
    }
    throw new IndexOutOfRangeException("Not found!");
}