out 参数在 C# 中不起作用。为什么?

The out parameter does not work in C#. Why?

out 参数在 C# 中不起作用。为什么?

这是我的代码:

using System;
using System.Collections.Generic;
                    
public class Program
{
    public static void Main()
    {
        var hashSet = new HashSet<int>(2);
        Console.WriteLine(hashSet.Contains(2));
    }
    
    public ListNode ReverseList(ListNode head) 
    {
        helper(head, out var newHead);
        return newHead;
    }
    
    private ListNode helper(ListNode current, out ListNode newHead) 
    {
        newHead = null;
        
        if (current == null) 
        {
            return null;
        }
        
        var next = helper(current.next, out newHead);

        if (next == null) 
        {
            newHead = current;
        } 
        else 
        {
            next.next = current;
        }
        
        return current;
    }
}

public class ListNode 
{
    public int val;
    public ListNode next;

    public ListNode(int val = 0, ListNode next = null) 
    {
        this.val = val;
        this.next = next;
    }
}

这是我遇到的错误:

Compilation error (line 13, col 30): ) expected
Compilation error (line 13, col 37): ; expected
Compilation error (line 13, col 37): Invalid expression term ')'

我连续花了 2 个小时试图找出问题所在。请帮助我。

Here是我在线的代码。

我在 dotnet fiddle 上尝试了您的示例,编译器(版本)似乎很重要。当 运行 你的代码在 .NET 4.7.2 编译器上时,我遇到了同样的异常,但是当你将编译器更改为 Roslyn 3.8 或 .NET 5 时,示例有效。

更改第 13 行

helper(head, out var newHead);

var newHead = new ListNode();
helper(head, out newHead);

如果您使用的 Visual Studio 版本错误,即使框架版本正确,也会发生这种情况。请注意,double-clicking 解决方案 (.sln) 文件并不总是会导致项目以所需的 VS 版本打开。如果您安装了多个 VS 版本,请先启动所需版本,然后使用“文件”菜单打开解决方案。