0

顧客の連絡先情報と住所情報を保持するクラスを作成しようとしています。

私は現在、コードを凝縮し、さまざまなメソッドと同じことを行いながら読みやすくすることを期待して、メソッドをオーバーロードしようとしています。また、これらは私が作成している統合テストであるため、NUnitを使用しているため、ランダムジェネレーターの由来です。これが私がこれまでに持っているものです:

  public static Address BuildAddress()
    {
        var gen = new RandomGenerator();
        return BuildAddress(gen.Phrase(10));
    }

    //build a billing address
    public static AddressInfo BuildAddress(string name)
    {
        return BuildAddress(name, "USA");
    }

    public static Address BuildAddress(string name, string country)
    {
        var gen = new RandomGenerator();

        var address = Builder<AddressInfo>.CreateNew()
            .With(x => x.Name = name)
            .And((x => x.Address1 = gen.Int() + " " + gen.Phrase(10) + " Street"))
            .And(x => x.City = gen.Phrase(15))
            .And(x => x.StateOrProvince = gen.Phrase(2))
            .And(x => x.Country = country)
            .And(x => x.PostalCode = "32561").
            Build();

        return address;

これを作成しましたが、郵送先住所用に別のコード ブロックを追加する必要があるとも考えていました。これを行うより短い方法があれば教えてください。

ありがとう!

4

2 に答える 2

4

私の理解が正しければ、上記のコード、つまりメソッドのオーバーロード チェーンを短縮したいということです...デフォルトのプロパティを使用できます。

public static Address BuildAddress(string name, int phrase = 10, string country = "USA")
{
        var gen = new RandomGenerator();

        var address = Builder<AddressInfo>.CreateNew()
            .With(x => x.Name = name)
            .And((x => x.Address1 = gen.Int() + " " + gen.Phrase(10) + " Street"))
            .And(x => x.City = gen.Phrase(15))
            .And(x => x.StateOrProvince = gen.Phrase(2))
            .And(x => x.Country = country)
            .And(x => x.PostalCode = "32561").
            Build();

        return address;
}

その後、次のように呼び出すことができます..

ClassName.BuilderAddress("my name");

または..

ClassName.BuilderAddress("my name", 5);

または..

ClassName.BuilderAddress("my name", 7, "Ireland");

以下のコメントに対する推奨される回答: (これについては 100% 確実ではありません)

public static T BuildAddress(string name, int phrase = 10, string country = "USA")
{
        var gen = new RandomGenerator();

        var address = Builder<T>.CreateNew()
            .With(x => x.Name = name)
            .And((x => x.Address1 = gen.Int() + " " + gen.Phrase(10) + " Street"))
            .And(x => x.City = gen.Phrase(15))
            .And(x => x.StateOrProvince = gen.Phrase(2))
            .And(x => x.Country = country)
            .And(x => x.PostalCode = "32561").
            Build();

        return address;
}
于 2013-03-21T14:16:49.677 に答える
0

オプションの名前付きパラメーターを検討することをお勧めします。

http://msdn.microsoft.com/en-us/library/dd264739.aspx

于 2013-03-21T14:14:22.517 に答える