我有一个关于将项目添加到新列表的快速问题,所以我有以下代码:
Public struct testType
{
public string title
public string names
}
public List<testType> testlist= new List<testType>();
private void readTitles(string line)
{
string[] substrings = line.Split(new string[] { "\",\"" }, StringSplitOptions.None);
testType temp = new testType();
if (substrings.Length > 0)
for (int i= 0;i<substrings.Length;i++)
{
temp.title= substrings;
testlist.Add(temp);
}
else
temp.title= "";
}
private void readNames(string line)
{
string[] substrings = line.Split(new string[] { "\",\"" }, StringSplitOptions.None);
testType temp = new testType();
if (substrings.Length > 0)
for (int i = 0; i < substrings.Length; i++)
{
temp.names= substrings[i];
testlist.Add(temp);
}
else
temp.names= "";
}
因此可以看到测试列表将同时包含标题和名称。它将填充标题和名称为null的名称,然后填充标题为null的名称。如何在不将新行添加到具有空值的测试列表中的情况下,将名称添加到创建的列表中?
答案 0 :(得分:2)
您是否有任何特殊原因要用单独的方法阅读标题和名称?
一个明显的解决方案是只用同一方法同时读取它们,然后可以创建一个同时填充两个属性的单个testType实例。我假设标题的数量总是和名称相同,并且字符串中的顺序是可以预测的:
public struct testType
{
public string title
public string name
}
public List<testType> testlist = new List<testType>();
private void readData(string titlesLine, string namesLine)
{
string[] titles = titlesLine.Split(new string[] { "\",\"" }, StringSplitOptions.None);
string[] names = namesLine.Split(new string[] { "\",\"" }, StringSplitOptions.None);
for (int i = 0; i < titles.Length; i++)
{
testType temp = new testType();
temp.title = titles[i];
temp.name = names[i];
testlist.Add(temp);
}
}
编辑:一种替代方法(但不建议使用)。如果您确实不能/不会将两种方法合而为一,则可以分别调用它们,并编写如下所示的代码,前提是您始终在readNames之前调用readTitles,并且始终以相同的顺序提供数据每一次。
public struct testType
{
public string title
public string name
}
public List<testType> testlist = new List<testType>();
private void readTitles(string titlesLine)
{
string[] titles = titlesLine.Split(new string[] { "\",\"" }, StringSplitOptions.None);
for (int i = 0; i < titles.Length; i++)
{
testType temp = new testType();
temp.title = titles[i];
testlist.Add(temp);
}
}
private void readNames(string namesLine)
{
string[] names = namesLine.Split(new string[] { "\",\"" }, StringSplitOptions.None);
for (int i = 0; i < testlist.Count; i++)
{
testlist[i].name = names[i];
}
}