如何在一个结构中存储不同类型的值

时间:2019-05-30 16:14:34

标签: c#

我有一个文本文件,其中包含字符串列表(示例6|Chicago|Illinois|I-98;I-90)。我正在尝试创建两个类。一类(CityReader)读取文本文件,其他文件将其打印。我声明了一个具有4个变量的类(CityItem),它们是int人口,字符串城市,字符串状态,List<int>州际公路。

CityReader类中,我创建了CityItem Object(CIObj),并且能够读取文件并定界并返回CIObj。但是,当我从另一个类访问此对象时,我只会看到文本文件中的最后一行。该对象未返回所有值。

我意识到尽管我在每个循环中都在读取文件。我没有存储这些值,因此该对象仅持有最后一个对象。

    CityItem Class-----

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace ReadingAtxtFile
    {
        public class CityItem
        {
    public int Population { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public List<int> Interstates = new List<int>();      

         }
    }


    CityReader Class-----

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Collections;
    namespace ReadingAtxtFile
    {
        public class CityReader
        {
             public CityItem ReadCities(string FilePath)
             {
        CityItem CIObj = new CityItem();
        var AllLines = File.ReadAllLines(FilePath, Encoding.UTF8);
        try
        {
            foreach (var item1 in AllLines)
            {
                string[] EachLine = item1.Split('|');

                CIObj.Population = Convert.ToInt32(EachLine[0]);
                CIObj.City = EachLine[1];
                CIObj.State = EachLine[2];

                    string[] IStates = EachLine[3].Split(';');

                    foreach (var item2 in IStates)
                    {
                        var IStatesAfterSplit = item2.Split("-");
                      CIObj.Interstates.Add(Convert.ToInt32(IStatesAfterSplit[1]));
                    }              
            }
        }
        catch (Exception)
        {
            Console.WriteLine("There is an issue with processing the data");
        }
        return CIObj;
        }          
        }
       }

输入文本文件:

6|Oklahoma City|Oklahoma|I-35;I-44;I-40
6|Boston|Massachusetts|I-90;I-93
8|Columbus|Ohio|I-70;I-71

我正在尝试处理文本文件并根据需要打印数据。例如。人口

Population,
City, State,
Interstates: I-35,I-40,I-45 (Sorted order)

1 个答案:

答案 0 :(得分:0)

您的ReadCities方法需要返回某种CityItem对象的集合,而不仅仅是一个CityItem对象。 .Net支持各种类型的集合,但是List可能最适合此实例。

然后,在填充CityItem对象之后,移至循环的下一个迭代之前,将CityItem对象添加到列表中。像...

List<CityItem> listOfCityItems = new List<CityItem>();
foreach (var line in AllLines)
{
    CityItem ci = new CityITem();
    // Populate the properties of ci
    listOfCityItems.Add(ci);
}