1

私はF# で非常に新しい (まだ非常に興奮している)です

を返すプロパティの同等の F# コードは何IEnumerable<object[]>ですか?

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

1 に答える 1

6

F# の C# iterator メソッドに相当するのはseq { .. }ブロックです。これは式なので、メソッドを定義するために使用できます (インライン シーケンスも使用できます)。ブロック内で( C#yieldに対応) を使用したり、特定のシーケンスのすべての要素を返すために を使用したりできます。yield returnyield!

配列を作成する式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" |] }
于 2013-06-23T20:04:37.447 に答える