2013-03-21 25 views
0

我正在嘗試創建持有客戶聯繫信息和地址信息的類。在c#中創建一個重載的方法

我目前正在嘗試重載方法,希望能凝結我的代碼,並且在做各種方法會做同樣的事情時更容易閱讀。此外,我正在使用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; 

我做了這一點,但我也想我需要添加另一個代碼塊的郵寄地址。請讓我知道是否有一個更短的方法來做到這一點。

謝謝!

+0

較短的方法嗎? – Yahya 2013-03-21 14:13:04

+2

我不確定我完全理解你的問題。你的意思是像'公共靜態地址BuildAddress(字符串名稱,字符串國家=「美國」)''? – 2013-03-21 14:14:09

+0

@Yahya是的,這就是我的意思! – CSharpDev4Evr 2013-03-21 14:29:02

回答

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; 
} 
+0

謝謝你。但我也想創建另一種具有相同信息但是用於郵寄地址的方法。我想知道增加另一種方法是否是最有效的方法,或者是否有其他方法。 – CSharpDev4Evr 2013-03-21 14:20:09

+0

那麼你可以使用泛型方法,只要它共享相同的屬性,它就無關緊要:http://msdn.microsoft.com/en-us/library/twcad0zb(v=vs.80 ).aspx我認爲這是另一個問題,但.. ..? – Seany84 2013-03-21 14:24:10

相關問題