Skip to content

DE CSharp Keyword allows

Codex edited this page Oct 11, 2026 · 2 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#: allows

Handbuch C# · Praktischer Leitfaden

Mit der Antieinschränkung „allows ref struct“ können Sie eine ref struct als Argument an einen generischen Typ oder eine generische Methode übergeben. Es ist nicht erforderlich, dass jedes Argument eine Ref-Struktur ist. Code mit einem solchen T muss den Regeln der Linksicherheit folgen und kann kein Boxen durchführen. Anti-Einschränkungen werden nach anderen Einschränkungen geschrieben.

Einfaches Beispiel (Example.cs)

Speichern Sie dieses Beispiel separat als Example.cs. Führen Sie es unabhängig von den anderen Beispielen dieser Seite aus.

Example.cs:

// PROJECT-EXAMPLE
void Ignore<T>(T value) where T : allows ref struct { }
System.Span<int> values = stackalloc int[2];
Ignore(values);
System.Console.WriteLine(values.Length);

Ergebnis:

2

Syntax

static int Measure<T>(T value) where T : IMeasured, allows ref struct;
static void Reset<T>(scoped ref T value) where T : allows ref struct;

Schnittstellenvertrag für Ref-Struktur ohne Boxing

using System;

public interface IMeasured { int Length { get; } }
public readonly ref struct NumberView : IMeasured
{
    private readonly ReadOnlySpan<int> values;
    public NumberView(ReadOnlySpan<int> values) => this.values = values;
    public int Length => values.Length;
}
internal static class Program
{
    public static void Main()
    {
        ReadOnlySpan<int> values = stackalloc int[] { 4, 8, 15 };
        var view = new NumberView(values);
        Console.WriteLine(Measure(view));
    }
    private static int Measure<T>(T value) where T : IMeasured, allows ref struct
        => value.Length;
}

Ergebnis:

3

Eine Reset-Funktion für Span und reguläre Zahl

using System;

internal static class Program
{
    public static void Main()
    {
        Span<int> scratch = stackalloc int[] { 1, 2, 3 };
        int counter = 7;
        Reset(ref scratch);
        Reset(ref counter);
        Console.WriteLine($"Span length: {scratch.Length}; counter: {counter}");
    }
    private static void Reset<T>(scoped ref T value) where T : allows ref struct
        => value = default!;
}

Ergebnis:

Span length: 0; counter: 0

Offizielle Quelle: Microsoft Learn.

Clone this wiki locally