如何在 C# 中模仿 Javascript "spread operator"?

How can I mimic a Javascript "spread operator" in C#?

我正在关注 youtube 上的动态编程教程以了解更多关于递归函数的信息,但我被困在使用展开运算符的地方。

代码在JavaScript

const howSum = (targetSum, numbers) =>{
    if(targetSum === 0) return [];
    if(targetSum < 0) return null;

    for(let num of numbers){
           const remainder = targetSum - num;
           const remainderResult = howSum(remainder, numbers);
            if(remainderResult != null){
                 return [...remainderResult, num];
            } 
    }
    return null;

};

这是我尝试复制函数的 C# 代码

class HowSumSlow {

    static dynamic HowSum(int targetSum, int[] numbers)
    {
            
        if (targetSum == 0) return numbers;
        if (targetSum < 0) return null;

        
        foreach( var num in numbers){
            var remainder = targetSum - num;
            int[] remainderResult = HowSum(remainder, numbers);

            if (remainderResult != null) { 
                //Code here//
            }
        }
        return null;
    }

    static void Main(string[] arg) {
        int[] numbers = new int[] { 2, 3 };
        Console.WriteLine(HowSum(7, numbers));
    }
    
}

编辑:我应该使用字典和键吗?我不明白如何解决这个问题。

  static Dictionary<int, int[]> spread = new Dictionary<int, int[]>();
            
        static dynamic HowSum(int targetSum, int[] numbers){
        ...
            if(spread.ContainsKey(remainderResult)){
                return spread[remainderResult];
        }
    }

编辑:

class HowSumSlow {

    static int[] HowSum(int targetSum, int[] numbers)
    {
        int[] empty = new int[] { };
        if (targetSum == 0) return empty;
        if (targetSum < 0) return null;

        
        
        foreach( var num in numbers){
            var remainder = targetSum - num;
            int[] remainderResult = HowSum(remainder, numbers);

            if (remainderResult != null){
                return remainderResult.Append(num).ToArray();
            }
        }
        return null;
    }
    static void Main(string[] arg) {
        int[] numbers = new int[] { 2, 3, 5 };
        Console.WriteLine(String.Join(",", HowSum(8, numbers)));
    }


}

c#中没有展开运算符,可以使用System.Linq命名空间中的Append方法。由于此 return 是一个 IEnumerable<T>,您还需要在之后调用 ToArray()

JS中的这一行

return [...remainderResult, num];

在c#中可能是下面的

return remainderResult.Append(num).ToArray();

请注意,您的方法总是 returns int[] 或 null,因此 return 类型应该是 int[] 而不是 dynamic!