0

我是 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 文档,该文档分配了一个包含多个缓冲区标签的通道。缓冲区标签的确切通道数未知且相同,因此我想使用列表。

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

4

4 回答 4

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

您也可以使用对象和集合初始化器

List<Bus> buses = new List<Bus> {
   new Bus {
      Channel = "Channel 6",
      Labels = new List<string> {
          "label A",
          "label B"
      }
   }
};
于 2013-11-04T21:20:44.977 回答
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>();
    }
}
于 2013-11-04T21:20:00.897 回答
0

尝试使用params参数属性的方法AddBus()来通过一行传递所有信息(见Program下文)。

public class Foo
{
    List<bus> bus_list_2d=new List<bus>();

    public void AddBus(string channel, params string[] labels)
    {
        bus_list_2d.Add(new bus()
        {
            channel=channel,
            label=new List<string>(labels)
        });
    }
}

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

class Program
{
    static void Main(string[] args)
    {
        Foo foo=new Foo();

        foo.AddBus("ABC", "A", "B", "C");
    }
}
于 2013-11-04T21:28:45.990 回答
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);
   }
}
于 2013-11-04T21:24:03.513 回答