0Pricing
C# Academy · Lektion

Grundlagen von Span/ReadOnlySpan (C#-6-Emulation)

Emulieren Sie Span/ReadOnlySpan mit ArraySegment : Erstellen Sie Ansichten über Arrays, teilen Sie sie mit Offset/Länge auf und verarbeiten Sie Daten ohne Kopieren.

Grundlagen von Span/ReadOnlySpan (C#-6-Emulation) ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Warum Slices wichtig sind

Ziel: Mit Teilbereichen arbeiten, ohne zusätzliche Speicherbelegungen.

  • ArraySegment<T> als Ansicht verwenden
  • Über offset und count Teilbereiche bilden
  • Methoden schreiben, die ArraySegment<T> akzeptieren
  • Operationen einfach und sicher halten

Zero-Copy-Ansicht

ArraySegment<T> ist eine Ansicht über einen Teil eines Arrays, ohne Daten zu kopieren. Übergeben Sie es an Methoden, um Kopien beim Erstellen von Teilbereichen zu vermeiden.

using System;

public class Program
{
  static int Sum(ArraySegment<int> seg)
  {
    int acc = 0;
    int end = seg.Offset + seg.Count;
    for (int i = seg.Offset; i < end; i++) acc += seg.Array[i];
    return acc;
  }

  public static void Main(string[] args)
  {
    int[] data = new int[] { 2, 4, 6, 8, 10 };
    ArraySegment<int> middle3 = new ArraySegment<int>(data, 1, 3); // 4,6,8
    Console.WriteLine("Sum = " + Sum(middle3)); // 18
  }
}

Verschachtelte Slices

Sie können den Hilfsfunktion Slice erstellen, um einen Unterbereich eines vorhandenen Segments zu bilden. Auch dabei werden keine Daten kopiert.

using System;

public static class Seg
{
  public static ArraySegment<T> Slice<T>(ArraySegment<T> seg, int start, int count)
  {
    if (start < 0 || count < 0 || start + count > seg.Count) throw new ArgumentOutOfRangeException();
    return new ArraySegment<T>(seg.Array, seg.Offset + start, count);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    string[] words = new string[] { "alpha", "beta", "gamma", "delta", "epsilon" };
    ArraySegment<string> mid = new ArraySegment<string>(words, 1, 3);  // beta, gamma, delta
    ArraySegment<string> inner = Seg.Slice<string>(mid, 1, 1);         // gamma
    Console.WriteLine(inner.Array[inner.Offset]); // gamma
  }
}

In-place über eine Ansicht arbeiten

Arbeiten Sie über offset/count, um das Erstellen von Teilstrings zu vermeiden; das entspricht dem auf ReadOnlySpan basierenden Trimmen.

using System;

public static class SegOps
{
  public static ArraySegment<char> Trim(ArraySegment<char> seg)
  {
    int start = seg.Offset;
    int end = seg.Offset + seg.Count - 1;

    while (start <= end && Char.IsWhiteSpace(seg.Array[start])) start++;
    while (end >= start && Char.IsWhiteSpace(seg.Array[end])) end--;

    int newCount = (end >= start) ? (end - start + 1) : 0;
    return new ArraySegment<char>(seg.Array, start, newCount);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    char[] buf = "   hello world   ".ToCharArray(); // single allocation for chars
    ArraySegment<char> all = new ArraySegment<char>(buf, 0, buf.Length);
    ArraySegment<char> trimmed = SegOps.Trim(all);

    // Print the trimmed part without new string:
    for (int i = 0; i < trimmed.Count; i++)
      Console.Write(trimmed.Array[trimmed.Offset + i]);
    Console.WriteLine();
  }
}

Bei Bedarf materialisieren

Manchmal benötigen Sie eine echte Kopie. Materialisieren Sie das Segment erst an der Grenze in ein neues Array.

using System;

public static class SegCopy
{
  public static T[] ToArray<T>(ArraySegment<T> seg)
  {
    T[] copy = new T[seg.Count];
    Array.Copy(seg.Array, seg.Offset, copy, 0, seg.Count);
    return copy;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
    ArraySegment<int> view = new ArraySegment<int>(data, 2, 3); // 3,4,5

    int[] materialized = SegCopy.ToArray<int>(view); // copy only when you must
    Console.WriteLine(string.Join(",", materialized));
  }
}

Tipps und Grenzen

Tipps:

  • Entwerfen Sie APIs so, dass sie ArraySegment<T> akzeptieren, wenn Sie mit Arrays arbeiten.
  • Behalten Sie offset und count im Blick.
  • Kopieren Sie nur an Grenzen (I/O, Interoperabilität).
  • Modernes Span bietet Sicherheit und Stack-Ansichten; hier verwenden wir Segmente, um das Denken in Slices zu lernen.

Slice-Nachbildung in C# 6

Kurze Überprüfung: Welcher C#-6-Typ bildet am besten einen Slice ohne Kopieren (eine Ansicht) über einen Teil eines Arrays nach?

Zusammenfassung

Zusammenfassung: Verwenden Sie ArraySegment<T> für Ansichten über Teilbereiche, schreiben Sie APIs, die Segmente akzeptieren, arbeiten Sie über offset/count und kopieren Sie nur, wenn es nötig ist.

Häufig gestellte Fragen

Ist die Lektion „Grundlagen von Span/ReadOnlySpan (C#-6-Emulation)“ kostenlos?

Ja — der vollständige Text von „Grundlagen von Span/ReadOnlySpan (C#-6-Emulation)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Grundlagen von Span/ReadOnlySpan (C#-6-Emulation)“?

Emulieren Sie Span/ReadOnlySpan mit ArraySegment : Erstellen Sie Ansichten über Arrays, teilen Sie sie mit Offset/Länge auf und verarbeiten Sie Daten ohne Kopieren. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „Grundlagen von Span/ReadOnlySpan (C#-6-Emulation)“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von Span/ReadOnlySpan (C#-6-Emulation)
  2. Emulation von Memory/ReadOnlyMemory: Fenster ohne Kopieren
  3. String-als-Span-APIs (C#-6-Emulation)
← Zurück zu C# Academy