2017-05-12 3 views
3

Ok permet de dire que j'ai ce programme simple dans .NET 4.6:.NET 4.7 retour Tuples et les valeurs nullables

using System; 
using System.Threading.Tasks; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static async void Main() 
     { 
      var data = await Task.Run(() => 
      { 
       try 
       { 
        return GetResults(); 
       } 
       catch 
       { 
        return null; 
       } 
      }); 

      Console.WriteLine(data); 
     } 

     private static Tuple<int,int> GetResults() 
     { 
      return new Tuple<int,int>(1,1); 
     } 
    } 
} 

fonctionne très bien. Donc, avec .NET 4.7, nous avons le nouveau type de valeur Tuple. Donc, si je convertis cela, il devient:

using System; 
using System.Threading.Tasks; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static async void Main() 
     { 
      var data = await Task.Run(() => 
      { 
       try 
       { 
        return GetResults(); 
       } 
       catch 
       { 
        return null; 
       } 
      }); 

      Console.WriteLine(data); 
     } 

     private static (int,int) GetResults() 
     { 
      return (1, 2); 
     } 
    } 
} 

Super! Sauf que ça ne marche pas. Le nouveau type de valeur de tuple n'est pas nullable, donc cela ne compile même pas.

Quelqu'un trouve-t-il un motif sympa pour gérer cette situation où vous voulez renvoyer un tuple de type valeur mais le résultat peut également être nul?

Répondre

3

En ajoutant l'opérateur de type Nullable ? vous pouvez faire le type de retour de la nullable fonction GetResults():

private static (int,int)? GetResults() 
{ 
    return (1, 2); 
} 

Votre code ne compilerait pas bien parce async n'est pas autorisé dans la fonction Main(). (Il suffit d'appeler une autre fonction dans Main() à la place)

+0

Comment appeler des méthodes asynchrones à partir de la méthode principale: https://blogs.msdn.microsoft.com/benjaminperkins/2017/03/08/how-to-call-an-async -method-from-a-console-app-main-method/ –

+0

Je n'ai jamais su que je pouvais faire ça! Logique. Merci beaucoup! – Kelly