C# Language Amélioration de la résolution de la surcharge


Exemple

L'extrait de code suivant montre un exemple de passage d'un groupe de méthodes (par opposition à un groupe lambda) lorsqu'un délégué est attendu. La résolution de la surcharge va maintenant résoudre ce problème au lieu de générer une erreur de surcharge ambiguë en raison de la capacité de C # 6 à vérifier le type de retour de la méthode qui a été transmise.

using System;
public class Program
{
    public static void Main()
    {
        Overloaded(DoSomething);
    }

    static void Overloaded(Action action)
    {
       Console.WriteLine("overload with action called");
    }

    static void Overloaded(Func<int> function)
    {
       Console.WriteLine("overload with Func<int> called");
    }

    static int DoSomething()
    {
        Console.WriteLine(0);
        return 0;
    }
}

Résultats:

6,0

Sortie

surcharge avec Func <int> appelée

Voir la démo

5.0

Erreur

erreur CS0121: l'appel est ambigu entre les méthodes ou propriétés suivantes: 'Program.Overloaded (System.Action)' et 'Program.Overloaded (System.Func)'

C # 6 peut également gérer le cas suivant de correspondance exacte pour les expressions lambda, ce qui aurait entraîné une erreur dans C # 5 .

using System;

class Program
{
    static void Foo(Func<Func<long>> func) {}
    static void Foo(Func<Func<int>> func) {}

    static void Main()
    {
        Foo(() => () => 7);
    }
}