字符串表 c# 的列表
本文关键字:列表 字符串 | 更新日期: 2023-09-27 17:56:53
我的 c# 脚本有问题。我想创建一个字符串表列表,如下所示:
public List<string[]> Signals = new List<string[]>();
public string[] Communication = new string[3];
所以它应该看起来像这样,我的列表中应该有几个通信实例:信号=(通信1,通信2,...),每个通信有3个字符串字段。
当我收集了我的 3 个通信数据(每个通信不同)时:
Communication[0]=CommunicationType;
Communication[1]=CommunicationTime;
Communication[2]=CommunicationName;
我将它们存储到我的列表中:
Signals.Add(Communication); // I have also tried .Insert with different Indexes
当我多次执行此操作,储存 6 个不同的通信表时,我想最终看到我的每个通信实例,所以我执行以下操作:
foreach (string[] Signal in Signals)
{
foreach (string CommunicationUnit in Signal)
{
Print(CommunicationUnit);
}
}
我所能看到的输出是列表中输入的最后一个元素的 6 倍,如下所示
阿林克3
121us
通信6
阿林克3
121us
通信6
阿林克3
121us
通信6
阿林克3
121us
通信6
阿林克3
121us
通信6
阿林克3
121us
通信6
当我想我会看到列表的每个元素实际上是 6 个不同的字符串表时。
我不明白我的脚本有什么问题。我认为错误出在foreach循环的某个地方。
重新创建一个简单的示例:(当您在插入后实例化新的字符串数组时,它有效)
List<string[]> Signals = new List<string[]>();
string[] Communication = new string[3];
Communication[0] = "a";
Communication[1] = "b";
Communication[2] = "c";
Signals.Add(Communication);
Communication = new string[3];
Communication[0] = "d";
Communication[1] = "e";
Communication[2] = "f";
Signals.Add(Communication);
foreach (string[] Signal in Signals)
{
foreach (string CommunicationUnit in Signal)
{
Console.WriteLine(CommunicationUnit);
}
}
您似乎只是在列表中添加了 6 次相同的通信对象。
如果将对象存储在列表中,则只需存储对该对象的引用,而不是副本。
然后,如果您将第一个通信项添加到列表中,然后对其进行修改并再次添加,则内存中对同一对象的引用将只有 2 次。
这意味着,如果您更新通信项目,则只会更新列表中的所有引用。
您必须为每个通信项目创建一个新的通信项目。
Signals.Add(new string[3] {
CommunicationType,
CommunicationTime,
CommunicationName
});
Signals.Add(new string[3] {
CommunicationType2,
CommunicationTime2,
CommunicationName2
});
或
string[] Communication = new string[3];
Communication[0]=CommunicationType;
Communication[1]=CommunicationTime;
Communication[2]=CommunicationName;
Signals.Add(Communication);
string[] Communication2 = new string[3];
Communication2[0]=CommunicationType;
Communication2[1]=CommunicationTime;
Communication2[2]=CommunicationName;
Signals.Add(Communication2);
如果使用相同的对象,则只会覆盖其数据。
输出是正确的:前 3 个输出行是你的第一个表(或 Signals.First())
ARINC3 <- CommunicationType
121us <- CommunicationTime
Comm6 <- CommunicationName
就像您在表中输入它们一样。您有 6 个表 x 每个 3 行,因此 18 行。
在类中创建 使用通信列表向属性发出信号并删除字符串数组。
然后使用 Signal 类中的列表添加通信。
只要保持简单和干净,不要让自己很难
。我只使用 1 foreach 循环而不是 2,并且不会创建多个列表。我只有清单,然后把它放在我的 foreach 中
List<string[]> Signals = new List<string[]>();
string[] Communication = new string[3];
Communication[0] = "a";
Communication[1] = "b";
Communication[2] = "c";
Signals.Add(Communication);
i
foreach (string CommunicationUnit in Signals)
{
Console.Writeline(CommunicationUnit[i]);
}