如何从文件中提取行并将其放入我的对象Article(int Code,string Name,string Amount)

时间:2018-02-04 12:57:29

标签: c# dictionary

初始化新对象

Article article = new Article();

新词典:

Dictionary<int, Article> articles = new Dictionary<int, Article>();

读取文件并逐行显示。

System.IO.StreamReader file = new System.IO.StreamReader(@"D:\Posao\Zadatak 3\Zadatak3\Zadatak3\Dokumenti\artikli.txt");
while ((line = file.ReadLine()) != null)
{
    var row = line.Split('|').ToString();
}

我的课文章:

public class Article
{
   private int Code { get; set; }
   private string Name { get; set; }
   private string Amount { get; set; }
}

我的文件如下:

343534|Food|Piece

657765|Milk|Liter
...

在每一行中,我得到三个参数(10934, 'food', 'piece',对于具有不同值的另一行,它们是相同的)

这些行的属性是我的类Article

的属性

所以问题是我从行中获取这些值后如何将这些值放入我的对象中?

3 个答案:

答案 0 :(得分:2)

目前Article课的方式,无法设置或访问课程中的任何属性:它们都是private

如果要定义只读属性,则必须仅使用public方法定义get。您仍然可以从类的构造函数为属性赋值。您应该定义一个将三条信息作为参数并从那里分配属性。

请注意,您的班级实际上是转换为struct的合适人选。

答案 1 :(得分:1)

您的代码目前有两个问题:

第一个是,您班级Article中的属性是私有的。因此,您不允许在课堂范围内访问它们。

有关详细信息,请查看 C# - Access ModifiersC# - Accessibility Levels

首先,您应该使properties__public__能够获取并设置值。如果你只想允许使用getter,你至少应该添加一个非参数的构造函数,如:

public Article(int code, string name, string amount) 
{
     // assign parameter here ...
}

并将您的属性设置为

public string Name { get; private set}

第二个是你的行:

var row = line.Split('|').ToString();

在这里,您只创建一个包含"System.String[]"的字符串。当前代码中的var表示字符串的类型,但您需要的是字符串数组。

因此,当您移除ToString()时,row变量现在看起来像

string[3] { "343534", "Food", "Piece" }`.

现在您可以创建一个新的Article,如:

 string line = "343534|Food|Piece";
 string[] row = line.Split('|'); // string[3] { "343534", "Food", "Piece" }

 Article  article = new Article();
 article.Code = Convert.ToInt32(row[0]);
 article.Name = row[1];
 article.Amount = row[2];

或以较短的方式使用Object Initializer

 Article  article = new Article 
 { 
     Code = Convert.ToInt32(row[0]),
     Name = row[1],
     Amount = row[2]
 }

答案 2 :(得分:0)

这是一个基于您的工作代码示例

 class Program
{

    static void Main(string[] args)
    {

        Dictionary<int, Article> articles = new Dictionary<int, Article>();
         using (System.IO.StreamReader file = new System.IO.StreamReader(@"\artikli.txt"))
        {
            string line = "";
            int lineCounter = 1;
            while ((line = file.ReadLine()) != null)
            {
                if (line.Contains("|"))
                {
                    var row = line.Split('|');
                    articles.Add(lineCounter++, new Article() { Code = int.Parse(row[0]), Name = row[1], Amount = row[2] });
                }
            }
            file.Close();
        }
    }

    public class Article
    {
        public int Code { get; set; }
        public string Name { get; set; }
        public string Amount { get; set; }
        public Article() { }
    }
}