Γρήγορη αναφορά

C# 7.0 Language Features Cheatsheet

Γρήγορος οδηγός αναφοράς για τη C# 7.0: out μεταβλητές, pattern matching, πλειάδες και αποδόμηση, τοπικές συναρτήσεις, ref επιστροφές και διαχωριστικά ψηφίων.

· Δημοσιεύτηκε

Γρήγορη αναφορά σύνταξης για τις δυνατότητες που εισήχθησαν στη C# 7.0 (.NET Framework 4.7 / .NET Core 2.0).

Μεταβλητές out

Δηλώστε μεταβλητές εξόδου απευθείας στη λίστα παραμέτρων κλήσης μεθόδου:

// Πριν τη C# 7:
int result;
if (int.TryParse(input, out result)) { ... }

// Στη C# 7:
if (int.TryParse(input, out int result))
{
    Console.WriteLine($"Parsed number: {result}");
}

// Απόρριψη περιττών out παραμέτρων με _
if (int.TryParse(input, out _))
{
    Console.WriteLine("Input is valid numeric");
}

Ταίριασμα Προτύπων (Pattern Matching)

Πρότυπα τύπων με is

public void PrintArea(object shape)
{
    if (shape is Circle c)
    {
        Console.WriteLine($"Circle area: {Math.PI * c.Radius * c.Radius}");
    }
    else if (shape is Rectangle r)
    {
        Console.WriteLine($"Rectangle area: {r.Width * r.Height}");
    }
}

Εντολές Switch με πρότυπα & ρήτρες when

switch (shape)
{
    case Circle c:
        Console.WriteLine($"Circle with radius {c.Radius}");
        break;
    case Rectangle r when r.Width == r.Height:
        Console.WriteLine($"Square {r.Width} x {r.Height}");
        break;
    case Rectangle r:
        Console.WriteLine($"Rectangle {r.Width} x {r.Height}");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
    default:
        Console.WriteLine("Unknown shape");
        break;
}

Πλειάδες (Tuples) & Αποδόμηση

Απαιτείται το πακέτο System.ValueTuple σε παλαιότερες εκδόσεις:

Επιστροφές επώνυμων πλειάδων

(string First, string Last, int Age) GetUser()
{
    return ("Alice", "Smith", 30);
}

var user = GetUser();
Console.WriteLine($"{user.First} is {user.Age} years old");

Αποδόμηση Πλειάδας

// Αποδόμηση σε μεμονωμένες μεταβλητές
var (first, last, age) = GetUser();

// Ή σε υπάρχουσες μεταβλητές
string f, l;
int a;
(f, l, a) = GetUser();

Τοπικές Συναρτήσεις (Local Functions)

Δήλωση βοηθητικών μεθόδων ένθετα μέσα στην κύρια συνάρτηση:

public int Factorial(int n)
{
    if (n < 0) throw new ArgumentException("Negative value", nameof(n));
    return Calculate(n);

    int Calculate(int x)
    {
        return x <= 1 ? 1 : x * Calculate(x - 1);
    }
}

Βελτιώσεις Σταθερών (Literals)

// Διαχωριστικά ψηφίων (_)
int million = 1_000_000;
long hexMask = 0xFF_EC_00_12;

// Δυαδικές σταθερές (0b)
byte byteFlag = 0b1010_0110;

Τοπικές και επιστρεφόμενες αναφορές (ref)

Επιστροφή αναφορών σε θέσεις μνήμης αντί για αντιγραμμένες τιμές:

public ref int Find(int target, int[] numbers)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] == target) return ref numbers[i];
    }
    throw new IndexOutOfRangeException();
}

int[] array = { 10, 20, 30 };
ref int val = ref Find(20, array);
val = 99; // array[1] becomes 99

Μέλη με Σώμα Έκφρασης (Expression-Bodied Members)

Επέκταση της σύνταξης expression-bodied σε κατασκευαστές, εκκαθαριστές και ιδιότητες:

class Item
{
    private string _name;

    // Expression-bodied constructor
    public Item(string name) => _name = name ?? throw new ArgumentNullException(nameof(name));

    // Expression-bodied property accessor
    public string Name
    {
        get => _name;
        set => _name = value ?? "default";
    }
}

Σχετικά θέματα