c# c#-7.0

C#7 ValueTuple error de compilación



c#-7.0 (2)

Creo que es porque no has definido fCount, cCount y aCount. Prueba esto

public async Task<(int fCount, int cCount, int aCount)> GetAllStatsAsync() { // Some code... //fCount, cCount, aCount are not defined here, so you should define them var fCount = 0; var cCount= 0; var aCount = 0; return (fCount , cCount, aCount ); //Other ways: //return (fCount : 0, cCount: 0, aCount : 0); //return new (int fCount , int cCount, int aCount ) { fCount = 0, cCount = 0, aCount = 0 }; } public async Task<HttpResponseMessage> GetInfoAsync() { // Some code... var stats = await _myClass.GetAllStatsAsync(); var vm = new ViewModel { FCount = stats.fCount, CCount = stats.cCount, ACount = stats.aCount }; return Request.CreateResponse(HttpStatusCode.OK, vm); }

Editado con sugerencia @Swell

Echa un vistazo a este post

Estoy usando VS2017 RC y mi aplicación apunta a net framework 4.6.1.

Tengo dos ensamblajes que hacen referencia a System.ValueTuple 4.3

MyProject.Services MyProject.WebApi

En MyProject.Services tengo una clase con un método como este

public async Task<(int fCount, int cCount, int aCount)> GetAllStatsAsync() { // Some code... return (fCount, cCount, aCount); }

En MyProject.WebApi tengo un controlador que usa este método así:

public async Task<HttpResponseMessage> GetInfoAsync() { // Some code... var stats = await _myClass.GetAllStatsAsync(); var vm = new ViewModel { FCount = stats.fCount, CCount = stats.cCount, ACount = stats.aCount }; return Request.CreateResponse(HttpStatusCode.OK, vm); }

Intellisense está funcionando y deconstruye la tupla pero cuando compilo falla sin ningún error en la ventana Lista de errores. En las ventanas de salida tengo estos errores:

2> MyController.cs (83,31,83,40): error CS1061: ''ValueTuple'' no contiene una definición para ''fCount'' y no se puede encontrar un método de extensión ''fCount'' que acepte un primer argumento de tipo ''ValueTuple'' ( ¿falta una directiva de uso o una referencia de ensamblaje?) 2> MyController.cs (84,39,84,49): error CS1061: ''ValueTuple'' no contiene una definición de ''cCount'' y no acepta el método de extensión ''cCount'' se pudo encontrar un primer argumento del tipo ''ValueTuple'' (¿falta una directiva de uso o una referencia de ensamblaje?) 2> MyController.cs (85,35,85,40): error CS1061: ''ValueTuple'' no contiene una definición para ''aCount'' y no se puede encontrar un método de extensión ''aCount'' que acepte un primer argumento del tipo ''ValueTuple'' (¿falta una directiva using o una referencia de ensamblado?)

Intenté agregar las marcas DEMO y DEMO_EXPERIMENTAL pero aún falla.

¿Alguna idea de lo que está mal?

EDITAR 1:

Este código funciona y las estadísticas están bien deconstruidas. Probablemente estoy golpeando un error.

public async Task<HttpResponseMessage> GetInfoAsync() { // Some code... var stats = await _myClass.GetAllStatsAsync(); var tu = stats.ToTuple(); var vm = new ViewModel { FCount = tu.Item1, CCount = tu.Item2, ACount = tu.Item3 }; return Request.CreateResponse(HttpStatusCode.OK, vm); }

EDIT 2:

Emisión abierta en github aquí: https://github.com/dotnet/roslyn/issues/16200


Si alguien cae en la misma trampa, para arreglar esto, necesita actualizar este paquete: Microsoft.Net.Compilers a 2.0 (debe mostrar el prelanzamiento)