我在F#中非常新(但非常兴奋).
返回的属性的等效F#代码是IEnumerable<object[]>什么?
public static IEnumerable<object[]> EnumerateFooBar
{
get
{
yield return new object[]
{
"foo",
"bar"
};
}
}
Run Code Online (Sandbox Code Playgroud)
与F#中的C#迭代器方法等效的是seq { .. }块.这是一个表达式,因此您可以使用它来定义方法(还有内联序列).在块中,您可以使用yield(对应yield return于C#),您还可以使用它yield!来返回给定序列的所有元素.
创建数组的表达式object[]可以转换为对象文字,[| ... |]但我们需要确保将值作为对象返回.这可以通过添加类型注释或使用box函数添加显式装箱来完成:
您的C#代码看起来像一个只读属性,可以使用以下内容将其翻译为值声明let:
let EnumerateFooBar = seq { yield [| box "foo"; box "bar" |] }
Run Code Online (Sandbox Code Playgroud)
使用类型注释的替代方法:
let EnumerateFooBar : seq<obj[]> = seq { yield [| "foo"; "bar" |] }
Run Code Online (Sandbox Code Playgroud)
如果你想将它定义为某个对象的属性:
type FooBarEnumerator() =
member this.EnumerateFooBar : seq<obj[]> = seq { yield [| "foo"; "bar" |] }
Run Code Online (Sandbox Code Playgroud)