オブジェクト初期化構文


99

私はF#から始めたばかりで、C#3のようにオブジェクトの初期化を行う構文が見つかりません。

すなわちこれを与えた:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

F#で次のように記述する方法:

var p = new Person { Name = "John", BirthDate = DateTime.Now };

回答:


137

あなたはこのようにそれを行うことができます:

let p = new Person (Name = "John", BirthDate = DateTime.Now)

慣例により、newは使い捨てクラスでのみ使用されます。
ShawnMartin

98

CMSからの答えは間違いなく正しいです。ここにも役立つかもしれない追加が1つだけあります。F#では、不変のプロパティのみを使用して型を記述したいことがよくあります。「オブジェクト初期化子」構文を使用する場合、プロパティは変更可能でなければなりません。F#の代替方法は、名前付き引数を使用することです。これにより、同様の構文が得られますが、不変の状態が維持されます。

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue

今、私たちは書くことができます:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

コードでは名前を指定する必要がありますが、生年月日はオプションの引数であり、デフォルト値がいくつかあります。


Tomasに感謝しますが、私の場合、Personは別のアセンブリにあり、それを変更することはできません:(
Mauricio Scheffer

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.