У меня есть один класс, который содержит вопрос, а другой - список класса вопросов. Моя цель - иметь возможность вызвать конструктор класса списка вопросов и передать путь к файлу в CSV, содержащий информацию для 55 вопросов. Затем вызов должен принять эту информацию и сгенерировать список объектов вопросов, связанных с данными.
У меня есть информация, хранящаяся в строковом массиве, однако я не уверен, как назначить эти данные новым объектам вопросов, поэтому я могу ссылаться на отдельный вопрос из экземпляра класса списка вопросов.
Кто-нибудь знает, как действовать? Вот мой код:
class QuestionBank : List<Question>
{
public QuestionBank()
{
}
public static QuestionBank GetQuestions(string path)
{
using (FileStream fs = File.OpenRead(path))
{
byte[] bytes = new byte[1024];
UTF8Encoding temp = new UTF8Encoding(true);
StringBuilder sb = new StringBuilder();
while (fs.Read(bytes, 0, bytes.Length) > 0)
sb.Append(temp.GetString(bytes));
MessageBox.Show(sb.ToString());
string[] splitText = sb.ToString().Split(',');
}
QuestionBank bank = new QuestionBank()
{
};
return bank;
}
}
Почему вы не используете File.ReadAllText или ReadAllLines?
Вы можете добавить свойство public List<Question> Questions { get; set; }
в QuestionBank. А внутри GetQuestions просто перебирайте элементы внутри splitText
. И для каждого элемента splitText вы создаете новый вопрос и добавляете его в список вопросов с помощью Questions.Add()
. С помощью этого решения вы можете удалить наследование : List<Question>
в QuestionBank. Также ReadAllLines
был бы лучше, как упоминалось в Обурге.
Думаю, вы ищете что-то вроде этого:
public class QuestionBank
{
private string filePath = "test.csv";
public List<Question> Questions = new List<Question>();
public void GetAllQuestions()
{
foreach (var line in File.ReadAllLines(filePath))
{
Questions.Add(new Question
{
Value = line
});
}
}
}
public class Question
{
public string Value { get; set; }
}
Будьте осторожны, пытаясь разобрать CSV вручную, если в тексте вопроса есть запятая, ваш
Split
завершится ошибкой.