У меня есть класс, в котором есть 3 открытых списка.По сути, это просто класс хранения данных.
У меня есть файл с разделителями типа xml (какие-то теги начала и конца, а также значение данных между ними)
У меня есть класс разбора, который обнаруживает и добавляет определенные вещи в определенные списки из класса хранения данных.В основном я пытаюсь обнаружить открывающий тег, сохраняю его в открывающем теге List в моем классе хранения данных.
Способ, которым я пытаюсь пойти (основываясь на плохом извинении учителя для примера),Main () создает экземпляр класса хранения данных в объекте, аналогично классу разбора.Затем он вызывает ParseMain для анализа файла и разделения тегов, значений данных и закрывающих тегов на их соответствующие списки внутри класса хранения данных.Затем, после того, как класс Parse закончен, вернемся в main, я вызываю методы внутри класса данных для отображения данных.
В основном на меня кричит компилятор, потому что, хотя данные xmlКласс держателя был создан в main, но не может или не может быть добавлен в публичный список. Я получаю именно эту ошибку
«Ссылка на объект требуется для нестатического поля, метода или свойства»
Как установить классы чтения данных List из моего класса разбора?
Мой учитель привел ужасный пример (у него все, кроме классов, помеченных как статические, и в основном просто вставил код стиля java / c ++ в пару классов)
Это дополнительный балл за базовыйКласс программирования, в котором я учусь. (нормальная версия полностью структурная внутри одного класса)
*** Правка - добавление фрагментов кода
XMLDoc XMLData = new XMLDoc();
XMLParse parseXML1 = new XMLParse();
//Calls the parseXML1 method passing it
//the name of the currently opened file.
parseXML1.MainParse(fileIn);
затем в мой основной анализ
public void MainParse(FileStream fileIn)
{
int byteIn;
while ((byteIn = fileIn.ReadByte()) != -1)
{
if (byteIn == '<')
{
ParseElement(ref byteIn,fileIn);
}
ParseElement выглядит как
public void ParseElement(ref int byteIn,FileStream fileIn)
{
token += byteIn;
//First I need to get the entire tag stored in token
do
{
byteIn = fileIn.ReadByte();
token += byteIn;
} while (byteIn != '>');
token += '>';
//now I insert a / into my compare token
compareToken = token;
compareToken.Insert(1,"/");
//It's an ending tag
if (token == compareToken)
{
//figure this out later
}
//It's an opening tag,store it into element list
else
{
XMLDoc.elements.Add(token);
//also tried XMLData/elements/Add(token)
}
}
и, наконец, мой класс XMLDoc выглядит так ...
class XMLDoc
{
public List<string> elements;
public List<string> dataValues;
public List<string> endingElements;
public XMLDoc()
{
elements = new List<string>();
dataValues = new List<string>();
endingElements = new List<string>();
}
//This method simply displays the contents of the arrays
public void DisplayCollected()
{
Console.WriteLine("Begin unformatted dump");
for (int ii = 0; ii <= elements.Count;ii++)
{
Console.WriteLine("\n"+elements[ii]+dataValues[ii]+
"\n"+endingElements[ii]);
}
Console.WriteLine("End unformatted dump\n");
}
//This method will generate an xml style display
//To add later
}
Я играю, учусь на практике и тому подобное.В этот момент мне пришлось отказаться от примера учителя, как уже упоминалось выше, он просто сделал каждый метод в каждом классе статичным, возможно, потому, что он собрал свой пример вместе с основной лабораторной работой (которая является структурной и все внутри первого класса)