在不同的空隙中填充结构列表

时间:2018-07-02 15:15:49

标签: c# list

我有一个关于将项目添加到新列表的快速问题,所以我有以下代码:

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的名称。如何在不将新行添加到具有空值的测试列表中的情况下,将名称添加到创建的列表中?

1 个答案:

答案 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];
    }
}