在 C# 中我可以这样做:
[InlineData(new [] { "foo" })]
Run Code Online (Sandbox Code Playgroud)
当我尝试在 F# 中执行此操作时:
[<InlineData([| "foo" |])>]
Run Code Online (Sandbox Code Playgroud)
它给了我一个编译错误:
This is not a valid constant expression or custom attribute value
Run Code Online (Sandbox Code Playgroud)
我做错了什么或者 F# 不支持数组作为属性参数吗?
更新
该问题似乎与属性的签名有关:
InlineDataAttribute(params dataValues: obj[]) : unit
Run Code Online (Sandbox Code Playgroud)
目标是将字符串数组作为 params 数组中的单个元素传递。
我认为您可能已经弄清楚了这一部分,但如果您这样做了[<InlineData([| "foo" :> obj |])>],编译器将停止抱怨并接受您作为 params 数组传入的数组。这不是您在编辑中所要求的(数组作为 params 数组中的单个项目),但至少您有一种将 params 数组传递给属性的方法。
我不确定是否公平地说 F# 在这里是错误的 - 只有将数组标记为不符合 CLS,才可以将数组作为属性参数。这里有一些细节。
您可以尝试的是将数组作为 params 数组传递给属性,并让您的测试函数接受 params 数组(通过用 注释参数[<ParamArray>])。