首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueTuple:创建八元组有什么问题?

ValueTuple:创建八元组有什么问题?
EN

Stack Overflow用户
提问于 2017-05-21 07:33:35
回答 3查看 266关注 0票数 2

ValueTuple作为C# 7.0中的一个新特性,具有公共方法Create,它可以帮助创建ValueTuples (从singleton to octuple或更多);另一方面,我们也可以使用new来实现相同的结果。我注意到它们的行为不同。我试图研究下面的实现是错误的,或者这是根据设计:

方法CreateOctuple()正在按预期工作:

代码语言:javascript
复制
private static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> CreateOctuple()
{
     return new ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple<int>(8)); ;
}

现在,我尝试使用Create()方法实现相同的输出,不幸的是,它正在抱怨返回类型:

代码语言:javascript
复制
private static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate()
{
    return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, ValueTuple.Create(8));
}

这里怎么了?

所有软件包都是最新的,我正在使用VisualStudio2017 -latest版本。

斯维克的建议

代码语言:javascript
复制
static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate()
{
  return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8);
}

这会提示相同的编译器异常:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-21 13:46:11

问题是,ValueTuple.Create已经负责在第8个元素上调用ValueTuple.Create。因此,虽然8元组的正确类型是ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>>,但您正在创建ValueTuple<int, int, int, int, int, int, int, ValueTuple<ValueTuple<int>>>。修复方法就是删除对ValueTuple.Create的第二个调用

代码语言:javascript
复制
static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate()
{
    return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8);
}

或者您可以只使用元组语法,但我假设您有理由避免它:

代码语言:javascript
复制
static (int, int, int, int, int, int, int, int) OctupleUsingCreate()
{
    return (1, 2, 3, 4, 5, 6, 7, 8);
}
票数 5
EN

Stack Overflow用户

发布于 2017-05-21 07:44:06

您需要更新这个包: Microsoft.Net.Compilers到2.0 (您需要显示预发布)。它会修复错误,检查这个这里

票数 0
EN

Stack Overflow用户

发布于 2017-05-28 21:12:42

注意:这不是ValueTuple库或C#编译器的问题。在TryRoslyn上没有错误:

代码语言:javascript
复制
using System;
public class C 
{
    private static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate()
    {
        return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44094315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档