我正在阅读page,它在Visual Studio 17 RC的release notes中正式引用,它指出以下内容:



拍摄时:

public abstract class Foo
{
    public abstract void AbstractTuple((int a, string b) tuple);

    public virtual void OverrideTuple((int a, string b) tuple)
    {
        Console.WriteLine($"First= {tuple.a}  Second = {tuple.b}");
    }
}

public class Bar : Foo
{
    public override void AbstractTuple((int c, string d) tuple)
    {
        Console.WriteLine($"First= {tuple.c}  Second= {tuple.d}");
    }

    public override void OverrideTuple((int c, string d) tuple)
    {
        base.OverrideTuple(tuple);
    }
}

我收到以下错误:







问题是:
  • 官方设计说明有误吗?还是这是尚未在正式的C#7.0版本中实现的行为?
  • 如果这是正确的行为,那么在重写方法中元组字段名称必须相同是有意义的吗?请记住,两个具有相同元组(int a, int b)(int c, int d)的方法不被视为重载候选者,并且会产生错误!
  • 我们在某处有正式的C#7.0功能文档吗?
  • 最佳答案



    据我所知,该文档已过时。 That document hasn't significantly changed since April 2016,而您得到的错误(在Roslyn源代码中为ERR_CantChangeTupleNamesOnOverride)为was introduced in August 2016(不要被其他错误代码所混淆,稍后将对其进行更改)。



    是的,这似乎是新的预期行为。



    考虑到C#7.0仍在开发中,因此文档是一个问题。官方.Net文档is currently under review中有关元组的文章,尽管它根本没有提到这些问题。

    因此,您发现的过时文档可能是目前的最佳来源。 I have created an issue asking for the documentation to be updated.

    10-07 19:34
    查看更多