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