Aller au contenu

Inférence de type à l'appel

Contexte : Le compilateur C# peut déduire automatiquement les paramètres de type d’une méthode générique en fonction des arguments passés. Cela évite de spécifier explicitement les types entre chevrons, rendant le code plus propre et plus lisible.

using System;
public class Utils
{
public static T Max<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) > 0 ? a : b;
}
}
class Program
{
static void Main()
{
// Inférence de type : le compilateur déduit T = int
int maxInt = Utils.Max(5, 10);
Console.WriteLine(maxInt);
// Inférence : T = string
string maxString = Utils.Max("abc", "def");
Console.WriteLine(maxString);
// Explicit (rarement nécessaire) :
double maxDouble = Utils.Max<double>(1.5, 2.5);
Console.WriteLine(maxDouble);
}
}
Fenêtre de terminal
dotnet run
10
def
2.5
  • L’inférence fonctionne avec les arguments, pas avec les valeurs de retour.
  • Si l’inférence échoue, il faut spécifier explicitement le type.
  • Les méthodes avec plusieurs paramètres de type peuvent parfois ne pas inférer tous les types.

LINQvar result = list.Select(x => x.ToString()); infère T et TResult automatiquement.
Voir documentation .NET sur l’inférence de type.