2011-08-19 51 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 
}