ctor 引数でいくつかの検証を行う簡単な C# 構造体を次に示します。
public struct Foo
{
public string Name { get; private set; }
public Foo(string name)
: this()
{
Contract.Requires<ArgumentException>(name.StartsWith("A"));
Name = name;
}
}
これを F# クラスに変換することができました。
type Foo(name : string) =
do
Contract.Requires<ArgumentException> (name.StartsWith "A")
member x.Name = name
ただし、これを F# の構造体に変換することはできません。
[<Struct>]
type Foo =
val Name : string
new(name : string) = { do Contract.Requires<ArgumentException> (name.StartsWith "A"); Name = name }
これにより、コンパイル エラーが発生します。
レコード、シーケンス、または計算式が無効です。シーケンス式は「seq { ... }」の形式にする必要があります
これは有効なオブジェクト構築式ではありません。明示的なオブジェクト コンストラクターは、代替コンストラクターを呼び出すか、オブジェクトのすべてのフィールドを初期化し、スーパー クラス コンストラクターへの呼び出しを指定する必要があります。
thisとthisを見てきましたが、引数の検証はカバーしていません。
私はどこで間違っていますか?