Ok lets say I have this simple program in .NET 4.6:
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);
}
}
}
Works fine. So with .NET 4.7 we have the new Tuple value type. So if I convert this it becomes:
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);
}
}
}
Great! Except it doesn't work. The new tuple value type is not nullable so this does not even compile.
Anyone find a nice pattern to deal with this situation where you want to pass a value type tuple back but the result could also be null?