2011-08-19 47 views
1

我是C#的新手,我需要一個小的幫助,我如何在類之間傳遞多個參數? 下面是一個小例子,但我的參數將超過10.是否有另一種方法呢?在C#中的類之間傳遞超過10個參數?

public StreamStructure(String name, string id, string classname, int number) 
    { 
     this.name = name; 
     this.id = id; 
     this.classname = classname; 
     this.number = number; 
    } 

名單------

List<abc> don = new List<abc>(); 
      foreach (XmlElement abc_cdb in abc_cdbs) 
      { 

       abc.Name = abc_cdb.GetAttribute("NAME"); 
       abc.Id = abc_cdb.GetAttribute("id"); 
       abc.Clssname = abc_cdb.GetAttribute("classname"); 
       abc.number = Convert.ToInt32(abc_cdb.GetAttribute("number")); 
       don.Add(abc); 


       } 

我已經用作ANS建議,但我想創建我的第一個記錄獲取與第二更換一個在C#中的列表,因爲MyDTO中的字段被定義爲公共。你有什麼想法如何解決這個問題?

回答

1

您可能比使用C# InitializersData Transfer Object更適合使用大量的構造函數參數。或者將兩者結合起來。

public class MyDTO 
{ 
    String Name { get; set; } 
    String Id { get; set; } 
    String ClassName { get; set; } 
    int Number { get; set; } 
} 

var MyDTO = new MyDTO() 
{ 
    Name  = Name, 
    Id  = Id, 
    ClassName = ClassName, 
    Number = Number 
} 

var stream = new StreamStructure(MyDTO) 

要創建這些對象的名單在你的榜樣,循環體中創建一個新的DTO。

var don = new List<MyDTO>(); 
foreach (XmlElement abc_cdb in abc_cdbs) 
{ 
    var abc = new MyDTO() 
    { 
     Name = abc_cdb.GetAttribute("NAME"); 
     Id = abc_cdb.GetAttribute("id"); 
     ClassName = abc_cdb.GetAttribute("classname"); 
     Number = Convert.ToInt32(abc_cdb.GetAttribute("number")); 
    }; 

    don.Add(abc); 
} 
+0

我已經使用了上面的建議,但我試圖在C#中創建一個列表,我的第一個記錄被替換爲第二個,因爲MyDTO中的字段被定義爲public。你有什麼想法如何解決這個問題? – CPDS

+0

您需要在循環體內的每次迭代中創建一個新的DTO。更新了答案以提供示例。 – Lucas

1

您可以傳遞一個表示您正在操作的項目的域對象。

public class Widget 
    { 
     public string Name {get;set;} 
     public int Id {get;set;} 
     public string ClassName {get;set;} 
     public int Number {get;set;} 
    } 

    var myWidget = new Widget(); 
    myWidget.Name = "Blue Widget"; 
    //etc 

    StreamStructure(myWidget); 
+0

是的,我會嘗試,但如果我試圖做一個榜單值會被新數據覆蓋。假設我的記錄是 - name - aaaa,id - erd,classname - 10c,number - 15,第二條記錄是don,werd,12c,100 ...寫完第一條記錄後,我在列表中添加第二條記錄記錄將由第二個取代。 – CPDS

+0

不知道我明白 - 「試圖製作一份清單」意味着什麼? –

+0

我可以粘貼該代碼。 – CPDS

2

當然,使用DTO的(數據傳輸對象)。也就是說,創建一個包含所有要發送的字段的類,並將其實例用作參數。額外的好處是即使你改變你的DTO類,你的方法簽名也不會改變。

0

您應該編寫一個新類,其中包含要傳遞給該方法的屬性,並更改方法以包含該新類。

對於你的榜樣,寫一個新的類是這樣的:

public class RequestObject 
{ 
    public string Name { get; set; } 
    public string ID { get; set; } 
    public string ClassName { get; set; } 
    public int Number { get; set; } 
} 

然後改變你的方法是這樣的:

public StreamStructure(RequestObject requestObject) 
{ 
    //DoStuff 
}