95 votes

Comment retourner une valeur avec une méthode anonyme ?

Cela échoue

string temp = () => {return "test";};

avec l'erreur

Impossible de convertir l'expression lambda en type 'string' car ce n'est pas un type de délégué.

Que signifie cette erreur et comment puis-je la résoudre ?

0 votes

Pourquoi cette question est-elle le premier résultat dans Google lorsqu'on recherche l'erreur "anonymous function converted to a void returning delegate cannot return a value" alors qu'elle n'a clairement rien à voir avec cela ?

0voto

wbadry Points 355

Voici un autre exemple utilisant C# 8 ( pourrait également fonctionner avec d'autres versions de .NET supportant les tâches parallèles )

using System;
using System.Threading.Tasks;

namespace Exercise_1_Creating_and_Sharing_Tasks
{
    internal static class Program
    {
        private static int TextLength(object o)
        {
            Console.WriteLine($"Task with id {Task.CurrentId} processing object {o}");
            return o.ToString().Length;
        }

        private static void Main()
        {
            const string text1 = "Welcome";
            const string text2 = "Hello";

            var task1 = new Task<int>(() => TextLength(text1));
            task1.Start();

            var task2 = Task.Factory.StartNew(TextLength, text2);

            Console.WriteLine($"Length of '{text1}' is {task1.Result}");
            Console.WriteLine($"Length of '{text2}' is {task2.Result}");

            Console.WriteLine("Main program done");
            Console.ReadKey();
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X