Types 如何使用F#语法将类型作为属性参数传递?
FsCheck允许在其NUnit集成中自定义Types 如何使用F#语法将类型作为属性参数传递?,types,f#,nunit,custom-attributes,fscheck,Types,F#,Nunit,Custom Attributes,Fscheck,FsCheck允许在其NUnit集成中自定义任意: [<Property(Verbose = true, Arbitrary= [typeof<Test.Arithmetic.MyArb>])>] static member MultiplyIdentity (x: int64) = x * 1 = x [] 静态成员多重身份(x:int64)=x*1=x 这种语法不起作用。我觉得有点不好意思问,但显然我以前从未需要过这个:如何将F#中的类型指定为属性参数?微软也不
任意:
[<Property(Verbose = true, Arbitrary= [typeof<Test.Arithmetic.MyArb>])>]
static member MultiplyIdentity (x: int64) = x * 1 = x
[]
静态成员多重身份(x:int64)=x*1=x
这种语法不起作用。我觉得有点不好意思问,但显然我以前从未需要过这个:如何将F#中的类型指定为属性参数?微软也不例外,我和微软在谷歌上搜索这个词时也遇到了一些麻烦(单词类型无处不在)
注1:任意
参数的类型为类型[]
我认为您很接近,但是[1;2;3]
创建了一个列表
,您需要使用[|1;2;3 |]
的数组文字:
[<Property(Verbose = true, Arbitrary= [| typeof<Test.Arithmetic.MyArb> |])>]
static member MultiplyIdentity (x: int64) = x * 1 = x
[]
静态成员多重身份(x:int64)=x*1=x
是的,我在写问题时没有注意我的列表语法。当然,您是正确的,但实际上我的重点是获取类型
,复制您的语法仍然会引发“这不是有效的常量表达式或自定义属性值”错误。你能重新编程吗?或者这个语法对你有用吗?在这里有用:我的错。第一个错误被F#中的工具提示错误隐藏,是“类型‘MyArb’未定义”我有Tests.算术.MyArb
,它存在,但显然当使用typeof
时,您不能使用FQN???不管怎样,当我将它简化为typeof
时,它“刚刚工作”。被我自己的愚蠢所愚弄;)。实际上,FQN通常不适用于引用位于同一命名空间中的类型。这是一个有趣的发现。我认为这是因为编译器试图从自己的名称空间中解析名称(即,它尝试Test.Test.算术.MyArb
)。但是我希望前缀global
会起作用(它不会)。我打开了一个问题: