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