我正在使用VS2017 RC,我的应用程序目标是 .NET Framework 4.6.1。
我有两个引用了 System.ValueTuple 4.3 的程序集:
MyProject.Services MyProject.WebApi
在 MyProject.Services 中,我有一个类,其中有一个方法如下:
public async Task<(int fCount, int cCount, int aCount)> GetAllStatsAsync()
{
// Some code...
return (fCount, cCount, aCount);
}
在 MyProject.WebApi 中,我有一个控制器使用这个方法,就像这样: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正常工作并对元组进行了解构,但编译时在错误列表窗口中没有任何错误。在输出窗口中出现以下错误:2>MyController.cs(83,31,83,40):错误CS1061:'ValueTuple'不包含“fCount”的定义,也没有接受第一个参数类型为“ValueTuple”的扩展方法“fCount”可以找到(是否缺少使用指令或程序集引用?)2>MyController.cs(84,39,84,49):错误CS1061:“ValueTuple”不包含“cCount”的定义,也没有接受类型为“ValueTuple”的第一个参数的扩展方法“cCount”可以找到(是否缺少使用指令或程序集引用?)2>MyController.cs(85,35,85,40):错误CS1061:'ValueTuple'不包含“aCount”的定义,也没有接受第一个参数类型为“ValueTuple”的扩展方法“aCount”可以找到(是否缺少使用指令或程序集引用?)
我尝试添加DEMO和DEMO_EXPERIMENTAL构建标志,但仍然失败。
有什么想法是错的吗?
编辑1: 这段代码可行,状态良好解构。我可能碰到了一个 bug。
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);
}
编辑2:
var stats = await ...
替换为(fCount, cCount, aCount) stats = await ...
会发生什么? - Gusdorerror CS1003: 语法错误,期望 '=>'
。 - JuChom