F#将数组传递给属性

时间:2014-04-18 11:42:09

标签: f#

在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数组中的单个元素传递。

1 个答案:

答案 0 :(得分:1)

我认为你可能已经想出了那个部分,但如果你做[<InlineData([| "foo" :> obj |])>],编译器将停止抱怨并接受你作为params数组传入的数组。这不是你在编辑中要求的(数组作为params数组中的单个项目),但至少你有办法将params数组传递给属性。

我不确定在这里说F#是否错误是公平的 - 只有将数组标记为不符合CLS才能将数组作为属性参数。一些细节here

你可以尝试将你的数组作为params数组传递给属性,并让你的测试函数接受一个params数组(通过用[<ParamArray>]注释参数)。