我们知道在C#中,我们可以使用typeof(OutType)
在编译时获取类型的类型,这使我们稍后将其传递给属性,因为它是常量表达式。
我看到了this问题,但它并没有真正解决编译时间的使用问题。
所以我的问题是:有没有办法在F#标准库中以编译类型获取给定模块的System.Type
?
答案 0 :(得分:2)
F#不允许通过设计使用其typeof
运算符来获取模块的类型,因为它们不是该语言中的一流概念。
从spec的13.2节:
编译F#模块以提供相应的已编译CLI类型声明,并 System.Type对象,尽管无法使用typeof访问System.Type对象 操作员。
模块会编译为静态类,因此可以在运行时使用反射获取类型(这就是typeof<MyModule.Dummy>.DeclaringType
示例中发生的情况),并且有可能获取在引用中定义的模块的类型在C#中使用typeof
运算符进行F#汇编。
对于您要尝试做的事情,最好使用类而不是模块,因为这样您就可以轻松掌握类型:
type MyFactoryClass =
static member TestCases = [ 1; 2; 3 ]
...
[<Test; TestCaseSource(typeof<MyFactoryClass>, "TestCases">]
let test (arg: int) = ...
答案 1 :(得分:1)
如果可以引用该模块中的一种类型(如果没有类型,则创建一个虚拟类型),可以这样做:
#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
QQuickView* view{new QQuickView};
view->setSource(QUrl("qrc:///qml/main_window_presenter.qml"));
view->show();
return app.exec();
}