Share via


Mot clé default dans le code générique (Guide de programmation C#)

Dans les classes et méthodes génériques se pose le problème de savoir comment assigner une valeur par défaut à un type paramétré T lorsque vous ne savez pas ce qui suit à l'avance :

  • Si T sera un type référence ou un type valeur.

  • Si T est un type valeur, s'il sera une valeur numérique ou un struct.

Étant donnée une variable t d'un type paramétré T, l'instruction t = null est valide uniquement si T est un type référence et t = 0 fonctionneront seulement pour les types valeur numériques mais pas pour les struct. La solution est d'utiliser le mot clé default, qui retournera la valeur Null pour les types référence et zéro pour les types valeur numériques. Pour les struct, il retournera chaque membre du struct initialisé à zéro ou null, selon qu'il s'agit de types valeur ou référence. Pour les types valeur Nullable, la valeur par défaut retourne System.Nullable<T>, initialisé comme tout struct.

L'exemple suivant de la classe GenericList<T> montre comment utiliser le mot clé default. Pour plus d'informations, consultez Vue d'ensemble des génériques.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Test with a non-empty list of integers.
            GenericList<int> gll = new GenericList<int>();
            gll.AddNode(5);
            gll.AddNode(4);
            gll.AddNode(3);
            int intVal = gll.GetLast();
            // The following line displays 5.
            System.Console.WriteLine(intVal);

            // Test with an empty list of integers.
            GenericList<int> gll2 = new GenericList<int>();
            intVal = gll2.GetLast();
            // The following line displays 0.
            System.Console.WriteLine(intVal);

            // Test with a non-empty list of strings.
            GenericList<string> gll3 = new GenericList<string>();
            gll3.AddNode("five");
            gll3.AddNode("four");
            string sVal = gll3.GetLast();
            // The following line displays five.
            System.Console.WriteLine(sVal);

            // Test with an empty list of strings.
            GenericList<string> gll4 = new GenericList<string>();
            sVal = gll4.GetLast();
            // The following line displays a blank line.
            System.Console.WriteLine(sVal);
        }
    }

    // T is the type of data stored in a particular instance of GenericList.
    public class GenericList<T>
    {
        private class Node
        {
            // Each node has a reference to the next node in the list.
            public Node Next;
            // Each node holds a value of type T.
            public T Data;
        }

        // The list is initially empty.
        private Node head = null;

        // Add a node at the beginning of the list with t as its data value.
        public void AddNode(T t)
        {
            Node newNode = new Node();
            newNode.Next = head;
            newNode.Data = t;
            head = newNode;
        }

        // The following method returns the data value stored in the last node in
        // the list. If the list is empty, the default value for type T is
        // returned.
        public T GetLast()
        {
            // The value of temp is returned as the value of the method. 
            // The following declaration initializes temp to the appropriate 
            // default value for type T. The default value is returned if the 
            // list is empty.
            T temp = default(T);

            Node current = head;
            while (current != null)
            {
                temp = current.Data;
                current = current.Next;
            }
            return temp;
        }
    }
}

Voir aussi

Référence

Génériques (guide de programmation C#)

Méthodes génériques (guide de programmation C#)

System.Collections.Generic

Concepts

Guide de programmation C#

Génériques dans le .NET Framework