如何将此 Python 脚本翻译成 C#?

How to translate this Python script to C#?

我有一个用 Python 语言编写的脚本,我想看看它在 C# 中的样子。

def combis(n):
    if n < 0:
        return
    if n == 0:
        yield []
    for x in (1, 3, 4):
        for combi in combis(n-x):
            yield [x] + combi

>>> list(combis(5))

目前我不明白如何在 C# 中实现这段代码,让我分心的是那些产量以及我的方法应该写在哪种类型中。 我目前所拥有的无法正常工作且无法理解

static int[]  Combs(int n)
        {
            int[] tusc = { };

            if (n < 0)
                yield break;
            if (n == 0)
                yield return tusc;
            int[] X = { 1, 3, 4 };
            for(int i = 0; i < X.Length; i++)
            {
                for(j = 0; j <= Combs(n-X[i]).Length; j++)
                {
                    yield return X + j;
                }

            }

        }

当n等于5时python脚本的输出是:

>>> list(combis(5))
[[1, 1, 1, 1, 1], [1, 1, 3], [1, 3, 1], [1, 4], [3, 1, 1], [4, 1]]

当n等于4时:

[[1, 1, 1, 1], [1, 3], [3, 1], [4]]          
using System;
using System.Collections.Generic;

namespace HowToTranslateInCSharp
{
    class Program
    {
        static IEnumerable<List<int>> Combis(int n)
        {
            if (n >= 0)
            {
                if (n == 0)
                    yield return new List<int>();
                else
                {
                    foreach (var x in new[] {1, 3, 4})
                    {
                        foreach (var combi in Combis(n - x))
                        {
                            var list = new List<int>() {x};
                            list.AddRange(combi);
                            yield return list;
                        }
                    }        
                }
            }
        }

        static void Main(string[] args)
        {
            var result = Combis(5);

            foreach (var list in result)
            {
                Console.WriteLine($"[{string.Join(" ", list)}]");
            }
        }
    }
}

输出是

[1 1 1 1 1]
[1 1 3]
[1 3 1]
[1 4]
[3 1 1]
[4 1]