3
record option
の値をF#からC#にnull値として返すことは可能ですか?私はF#アセンブリにいくつかのロジックをカプセル化し、 "C#に自然な"ファサードの背後にあるものを隠すことを望みます。このようになりますのC#に戻るにはC#からの呼び出し時にレコードのオプションをnullに戻す
type Data = { DataField1: int; DataField2: string }
とコード:ここではいくつかの合成例です
type SomeFacade() =
let data = Some { DataField1 = 1; DataField2 = "hello" }
member x.GetData() = if Option.isSome data then Option.get data else null
しかし、null値を使用することを許可されていません。
[<AllowNullLiteral>]
属性を使用しようとする可能性がありますが、レコードタイプには使用できません。Record
の代わりにClass
を使用できますが、ほとんどの作業がF#部分内で行われるはずなので、F#内で作業する方がより複雑になります。そして、私はwith
キーワードを使って別のレコード値をコピーしてレコード値を作成する非常に便利な方法が好きです。- F#アセンブリ内でレコードとして
Data
を使用し、C#アセンブリに公開するときに何らかの中間クラスDataClass
に変換することもできますが、扱いにくいです。
解決策はありますか? (私はF#コードの中でヌル値を使用するつもりはないが、C#コードにヌル値を返すことを望む)。レコードタイプの場合
のですか? –
Nothing ...しかし、私はちょうどC#プロジェクトだけを含む大きなソリューションでF#を使って遊んでいます.F#にはあまりにも限定された型をF#アセンブリの外に見せたくありません。彼らは見ることができますが、そうでない方が良いでしょう。私たちはまだF#を使用していませんので、私は同僚が "未知"のプログラミング言語であまりにも怖がって欲しくないようにしています:) –
ああ、ステルスのアプローチ:) –