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)