在c#的类之间传递超过10个参数

本文关键字:10个 参数 之间 | 更新日期: 2023-09-27 18:05:58

我是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 ------

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中的字段被定义为公共的。你知道怎么解决这个问题吗?

在c#的类之间传递超过10个参数

当然,使用DTO(数据传输对象)。也就是说,创建一个包含您想要发送的所有字段的类,并使用它的一个实例作为参数。额外的好处是,即使您更改了DTO类,您的方法签名也不会更改。

使用c#初始化器或数据传输对象可能比使用大量构造函数参数更好。或者将两者结合。

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 );
}

您可以传递一个表示您正在操作的项的域对象。

    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);

您应该编写一个包含您想要传递给方法的属性的新类,并更改您的方法以包含该新类。

对于您的示例,编写一个新类,如下所示:
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
}