在 Python3 中使用 C# DLL 和 Pythonnet

Using C# DLL in Python3 with Pythonnet

我在 Python3 中使用 c# dll,我使用的模块是 DaveSkender/Stock.Indicators 它是用 C# 编写的,符合公共语言规范 (CLS)。 所以我把它编译成dll 并在 Python3 中导入,如下所示:

import clr
clr.AddReference(r'dll/Skender.Stock.Indicators')

到此为止,可以正常运行,可以确定模块导入成功了。 但问题是传递参数。 C# DLL中有这样一个方法:

public static IEnumerable<SmaResult> GetSma<TQuote>(
            IEnumerable<TQuote> history,
            int lookbackPeriod)
            where TQuote : IQuote
        {
            // WHATEVER
        }

所以我像这样在 Python 中传递了参数:

from System.Collections.Generic import List

// Definitely, Qoute is inherited from IQoute 
history_list = List[Qoute]()
Indicator.GetSma(history_list, int(1))

但是一直显示TypeError:

TypeError: No method matches given arguments for GetSma: (<class 'System.Collections.Generic.0, Culture=neutral, PublicKeyToken=null]]'>, <class 'int'>)

我不知道 Python 中的哪种类型与 C# 兼容。 我应该在这个方法中传递什么? 我的意思是我应该为 Python 中的 IEnumerable 传递什么?

感谢@Ralf,关于 GetSma(),我再次查看了 C# 代码。它是通用方法,应该以通用形式调用。所以我试着像下面这样调用这个方法:

Indicator.GetSma[Qoute](history_list, int(1))

有效!!希望这个回答对有和我一样的人有帮助。