7

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
4

1 に答える 1

8

型に対する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
于 2012-11-01T13:17:16.127 に答える