C#とF#の間の相互運用です
F#では、
type test =
{
value: int
}
type Wrapper (value: test) =
member val Value = value with get, set
let trythis = new Wrapper(null) // error as expected
ただし、C#では
var trythis = new Wrapper(null); //this runs fine
C#とF#の間の相互運用です
F#では、
type test =
{
value: int
}
type Wrapper (value: test) =
member val Value = value with get, set
let trythis = new Wrapper(null) // error as expected
ただし、C#では
var trythis = new Wrapper(null); //this runs fine
型に対するnull許容でない制約は、F#固有の機能であるため、.NETでは表現されません(したがって、C#はそれを尊重しません)。
Unchecked.defaultof<_>
実際、安全でない値を使用すると、F#でもこれを回避できます。
let trythis = new Wrapper(Unchecked.defaultof<_>)
null
これは、C#に公開されているオブジェクトをチェックインする場合に非常に便利です。
type Wrapper (value: test) =
if value = Unchecked.defaultof<_> then
invalidArg "value" "Value should not be null."
member val Value = value with get, set