List <t>其中T是具有两个成员的类,其中一个成员是另一个列表。如何添加/设置变量?</t>

时间:2013-11-04 21:14:39

标签: c# list-template

我是C#的新手,也是其他面向对象语言的新手,所以请原谅我的无知。我正在尝试创建一个List变量,该变量绑定到具有两个成员的类,例如:

List<bus> bus_list_2d = new List<bus>();

public class bus
{
  public string channel { get; set; }
  public List<String> label { get; set; }
}

我将解析一个xml文档,该文档分配了一个包含多个缓冲区标签的通道。确切的通道数是未知的,缓冲标签也是如此,因此我想要使用List。

我想知道如何创建添加功能,我将添加单个频道,然后继续添加标签项,然后继续下一个频道并在其下添加标签项,依此类推。有人可以给我一个示例片段吗?

4 个答案:

答案 0 :(得分:4)

在C#中,我们对类型和公共成员使用PascalCase名称。因此,最好使用以下名称:

public class Bus
{
  public string Channel { get; set; }
  public List<string> Labels { get; set; }
}

创建新的总线列表如下所示:

List<Bus> buses = new List<Bus>();
Bus bus1 = new Bus();
bus1.Channel = "Channel 6";
bus1.Labels = new List<string>();
bus1.Labels.Add("label A");
bus1.Labels.Add("label B");
buses.Add(bus1);

您也可以使用object and collection initializers

List<Bus> buses = new List<Bus> {
   new Bus {
      Channel = "Channel 6",
      Labels = new List<string> {
          "label A",
          "label B"
      }
   }
};

答案 1 :(得分:1)

添加到临时变量然后将其添加到bus_list_2d

可能更容易
bus b = new bus();
b.channel = "channel";
b.label = new List<string>();
b.label.Add( "label1" ); // this will probably be done in a loop of some kind

// ...

bus_list_2d.Add( b );

此外,您可能希望bus类的构造函数将label初始化为新的List<string>,这样您就不必明确地执行此操作。另请遵循命名约定。类,属性和方法大写并使用驼峰大小写。

public class Bus
{
    public string Channel { get; set; }
    public List<String> Label { get; set; }

    public Bus( string channel = "" )
    {
        this.Channel = channel;
        this.Label = new List<string>();
    }
}

答案 2 :(得分:0)

您可以尝试这样的事情:

var busInfo = new Dictionay<string, List<string>>();


foreach(var channel in channels)
{
   busInfo.Add(channel, new List<string>());
   foreach(var label in channel.labels)
   {
      busInfo[channel].Add(label);
   }
}

答案 3 :(得分:0)

尝试使用方法params的{​​{1}}参数属性将所有信息传递到一行(请参阅下面的AddBus())。

Program