返回IEnumerable <object []> </object []>的属性的等效F#代码是什么

时间:2013-06-23 19:54:12

标签: f#

我是非常新的(但非常兴奋)在F#中。

返回IEnumerable<object[]>的属性的等效F#代码是什么?

public static IEnumerable<object[]> EnumerateFooBar
{
    get
    {
        yield return new object[]
        {
            "foo", 
            "bar"
        };
    }
}

1 个答案:

答案 0 :(得分:5)

F#中的C#迭代器方法的等价物是seq { .. }块。这是一个表达式,因此您可以使用它来定义方法(还有内联序列)。在块中,您可以使用yield(对应于C#中的yield return),您还可以使用yield!返回给定序列的所有元素。

创建数组object[]的表达式可以转换为对象文字[| ... |],但我们需要确保将值作为对象返回。这可以通过添加类型注释或使用box函数添加显式装箱来完成:

您的C#代码看起来像只读属性,可以使用let转换为值声明:

let EnumerateFooBar = seq { yield [| box "foo"; box "bar" |] }

使用类型注释的替代方法:

let EnumerateFooBar : seq<obj[]> = seq { yield [| "foo"; "bar" |] }

如果你想将它定义为某个对象的属性:

type FooBarEnumerator() = 
  member this.EnumerateFooBar : seq<obj[]> = seq { yield [| "foo"; "bar" |] }