0Pricing
C# Academy · Lezione

Il tipo Index e l'operatore ^

Faccia riferimento agli elementi a partire dalla fine di una raccolta.

Il tipo Index e l'operatore ^ è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Incontro con il tipo Index

C# mette a disposizione il tipo dedicato System.Index per descrivere una posizione all'interno di una sequenza. A differenza di un semplice int, un Index può rappresentare una posizione conteggiata dalla fine di una raccolta, non soltanto dall'inizio.

In questo modo, espressioni come "restituisca l'ultimo elemento" diventano chiare e sicure.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10

L'operatore ^ (dalla fine)

L'operatore a forma di accento circonflesso ^ crea un Index che conta dalla fine. ^1 indica l'ultimo elemento, ^2 il penultimo e così via.

Noti che ^1 è l'ultimo indice valido, mentre ^0 equivale a Length e si trova una posizione oltre la fine.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40

Index come valore di prima classe

Un Index è un valore reale che può memorizzare in una variabile, passare ai metodi e riutilizzare. In questo modo la posizione viene separata dalla raccolta.

using System;

int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]);       // 5
Console.WriteLine(data[secondLast]); // 4

IsFromEnd e Value

Ogni Index espone due proprietà: Value (l'offset intero) e IsFromEnd (indica se è stato creato con ^).

using System;

Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd);     // 2 True

GetOffset risolve la posizione

Un indice dalla fine ha significato solo dopo aver determinato la lunghezza della raccolta. Index.GetOffset(length) lo converte in un offset concreto a base zero.

using System;

Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4

^0 è una posizione oltre la fine

Poiché ^0 viene risolto in Length, utilizzarlo per indicizzare genera un'eccezione. È utile soltanto come limite superiore esclusivo di un intervallo, come vedrà nella lezione successiva.

using System;

int[] data = { 1, 2, 3 };
try {
    Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
    Console.WriteLine("^0 is past the end");
}

Index funziona con molte raccolte

Qualsiasi tipo dotato di un indicizzatore e di una proprietà Length o Count (oltre al supporto appropriato) può utilizzare Index. Array, string e Span<T> funzionano immediatamente.

using System;

string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // C

Calcolo dinamico degli indici

Può creare un Index da un intero determinato a runtime utilizzando l'operatore ^ su una variabile.

using System;

int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n;            // ^ works on variables too
Console.WriteLine(data[idx]); // 15

Index e il semplice int

Un semplice int conta sempre dall'inizio. Index aggiunge la possibilità di contare dalla fine, continuando a supportare la conversione implicita da int, così il codice esistente continua a funzionare.

using System;

Index a = 1;   // implicit from int
Index b = ^1;  // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // True

Evitare gli errori di indice di uno

Per raggiungere l'ultimo elemento si utilizzava arr[arr.Length - 1]. Con ^1 l'intento è esplicito e non c'è alcun calcolo aritmetico che possa contenere errori.

using System;

int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]);                // new way: 95

Index nel codice reale

Ecco un piccolo helper che restituisce l'ultimo elemento di qualsiasi array utilizzando ^1, mantenendo pulito il punto di chiamata.

using System;

static T Last<T>(T[] items) => items[^1];

int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12

Verifica rapida

Verifichi la sua comprensione del tipo Index e dell'operatore ^.

Riepilogo

Ha imparato che System.Index rappresenta una posizione che può essere conteggiata dall'inizio o, con l'operatore ^, dalla fine.

  • ^1 indica l'ultimo elemento; ^0 equivale a Length (una posizione oltre la fine).
  • Index dispone di Value, IsFromEnd e GetOffset(length).
  • Supporta la conversione implicita da int e funziona con array, stringhe e span.

Domande Frequenti

La lezione «Il tipo Index e l'operatore ^» è gratuita?

Sì — il testo completo di «Il tipo Index e l'operatore ^» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Il tipo Index e l'operatore ^»?

Faccia riferimento agli elementi a partire dalla fine di una raccolta. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Il tipo Index e l'operatore ^»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Il tipo Index e l'operatore ^
  2. Il tipo Range e l'operatore ..
  3. Intervalli con array e stringhe
  4. Tipi personalizzati che supportano gli intervalli
← Torna a C# Academy