“ For”循环-使用PropertyInfo为属性分配值

时间:2019-02-12 14:42:36

标签: c#

我正在尝试使用C#控制台应用程序进行快速采访。

该表单由问题(使用StreamReader从文本文件中读取)和答案组成,这些问题是我想使用Console.ReadLine()获得的。

每个答案都应保存到PotentialEmployee类中定义的属性中。我不想再写同一段代码,所以我想到的是做一个for循环。

在for循环中,我总是总是先从StreamReader加载一个问题,然后再为在PropertyInfo中定义的属性分配一个答案,并且每个答案都应分配给另一个属性(例如Name,BirthDate等) ),所以我做了一个索引变量。

但是不幸的是,该程序无法正常运行,因为它没有将信息保存到属性中。

PotentialEmployee pe = new PotentialEmployee();
PropertyInfo[] pi = pe.GetType().GetProperties();

using (StreamReader InterviewQuestions = new StreamReader(filePath))
{
    for (int particularQuestion = 0; particularQuestion < TotalLines(filePath); 
         particularQuestion++)
    {
        int index = 0;
        Console.WriteLine(InterviewQuestions.ReadLine());
        pi[index].SetValue(pe, Console.ReadLine(), null);
        index++;
    }
}

所以它应该像这样:

1)你叫什么名字?

Name = Console.ReadLine()

2)你什么时候出生的?

BirthDate = Console.ReadLine()

等您能帮我解决这个问题吗?谢谢!

编辑:已经发现我的愚蠢错误,该索引将始终为零。无论如何,我将按照建议将其重写为Dictionary。谢谢大家的回答:)

2 个答案:

答案 0 :(得分:0)

实现上述目标的一种简单方法是,如@Damien_The_Unbeliever所建议,将每个问题存储为Key,将每个答案存储为ValueDictionary中。这将为您提供一个记录每个问题和答案的结构,并允许您使用问题作为标识符来遍历它们。

下面是关于如何向PotentialEmployee类添加字典,然后使用控制台记录结果的简单建议

static void Main(string[] args)
{
    PotentialEmployee pe = new PotentialEmployee();

    using (StreamReader InterviewQuestions = new StreamReader(@"C:\temp\Questions.txt"))
    {
        string question;
        while ((question = InterviewQuestions.ReadLine()) != null)
        {
            Console.WriteLine(question);
            string response = Console.ReadLine();
            pe.Responses.Add(question, response);
        }
    }

    // The following will then go through your results and print them to the console to     
    // demonstrate how to access the dictionary

    Console.WriteLine("Results:");

    foreach(KeyValuePair<string, string> pair in pe.Responses)
    {
        Console.WriteLine($"{pair.Key}: {pair.Value}");
    }
}

...

class PotentialEmployee
{
    // Add a dictionary to your object properties
    public Dictionary<string, string> Responses { get; set; }
    ...

    public PotentialEmployee()
    {
        // Make sure you initialize the Dictionary in the Constructor
        Responses = new Dictionary<string, string>();
    }

    ...
}

答案 1 :(得分:0)

首先,您需要确保要存储答案的文件和属性中的问题序列应具有相同的序列。

这对我有用

PotentialEmployee pe = new PotentialEmployee();
PropertyInfo[] pi = pe.GetType().GetProperties();
string filePath = "D:\\Questions.txt";
using (StreamReader InterviewQuestions = new StreamReader(filePath))
{
    for (int particularQuestion = 0; particularQuestion < TotalLines(filePath);
         particularQuestion++)
    {                    
        Console.WriteLine(InterviewQuestions.ReadLine());
        pi[particularQuestion].SetValue(pe, Console.ReadLine(), null);
    }
}