我如何 link class with main 方法在同一个文件中
how do I link the class with main method in the same file
这是我第一次使用C#创建程序。我如何 GetXMLData 然后在 xml 文件中更新数据后添加记录?这个程序没有return我的错误,但我看不到数据ID“4”已经被添加到记录中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace LinQ
{
class Program
{
private string path = "TestData.xml";
private void GetXMLData()
{
XDocument testXML = XDocument.Load(path);
var students = from student in testXML.Descendants("Student")
select new
{
ID = Convert.ToInt32(student.Attribute("ID").Value),
Name = student.Element("Name").Value
};
foreach (var student in students)
{
// Do other operations with each student object
}
}
private void InsertXMLData(string name)
{
XDocument testXML = XDocument.Load(path);
XElement newStudent = new XElement("Student",
new XElement("Name", name)
);
var lastStudent = testXML.Descendants("Student").Last();
int newID = Convert.ToInt32(lastStudent.Attribute("ID").Value);
newStudent.SetAttributeValue("ID", 4);
testXML.Element("Students").Add(newStudent);
testXML.Save(path);
}
private void UpdateXMLData(string name, int id)
{
XDocument testXML = XDocument.Load(path);
XElement cStudent = testXML.Descendants("Student").Where(c => c.Attribute("ID").Value.Equals(id.ToString())).FirstOrDefault();
cStudent.Element("Name").Value = name;
testXML.Save(path);
}
static void Main(string[] args)
{
//GetXMLData();
//InsertXMLData(string name);
}
}
}
您的 Main 函数没有执行任何操作。
改变
static void Main(string[] args)
{
//GetXMLData();
//InsertXMLData(string name);
}
到
static void Main(string[] args)
{
GetXMLData();
InsertXMLData("paul");
}
您还必须将方法设为静态。
改变
private void GetXMLData()
private void InsertXMLData(string name)
private void UpdateXMLData(string name, int id)
到
private static void GetXMLData()
private static void InsertXMLData(string name)
private static void UpdateXMLData(string name, int id)
如果你想访问你的方法而不使它们成为静态的,你必须创建你的对象的一个实例。
喜欢:
Program myProgram = new Program();
myProgram.GetXMLData();
myProgram.InsertXMLData("paul");
请为 xml 文件提供正确的路径或将其保存在 exe 位置。
以下是编译代码所需的更改
class Program
{
private static string path = "D:\TestData.xml";
static void Main(string[] args)
{
GetXMLData();
InsertXMLData("XYZ");
}
private static void GetXMLData()
{
// try
// {
XDocument testXML = XDocument.Load(path);
var students = from student in testXML.Descendants("Student")
select new
{
ID = Convert.ToInt32(student.Attribute("ID").Value),
Name = student.Element("Name").Value
};
foreach (var student in students)
{
// Do other operations with each student object
}
// }
//catch (Exception err)
//{
// MessageBox.Show(err.Message);
//}
}
private static void InsertXMLData(string name)
{
//try
//{
XDocument testXML = XDocument.Load(path);
XElement newStudent = new XElement("Student",
new XElement("Name", name)
);
var lastStudent = testXML.Descendants("Student").Last();
int newID = Convert.ToInt32(lastStudent.Attribute("ID").Value);
newStudent.SetAttributeValue("ID", 4);
testXML.Element("Students").Add(newStudent);
testXML.Save(path);
//}
//catch (Exception err)
//{
// MessageBox.Show(err.Message);
//}
}
private static void UpdateXMLData(string name, int id)
{
//try
//{
XDocument testXML = XDocument.Load(path);
XElement cStudent = testXML.Descendants("Student").Where(c => c.Attribute("ID").Value.Equals(id.ToString())).FirstOrDefault();
cStudent.Element("Name").Value = name;
testXML.Save(path);
//}
//catch (Exception err)
//{
// MessageBox.Show(err.Message);
//}
}
}
快速查看代码,似乎有两个问题可能导致应用程序无法正常执行。
首先,
Main()
中的方法调用已被注释掉,取消对这两个方法的注释(去掉前导//
)
其次,
函数 GetXMLData()
、InsertXMLData()
和 UpdateXMLData()
不是静态的,需要使用 class 实例。您可以通过添加关键字 static
或使用 class 实例来调用函数来解决此问题。
要么将函数定义更改为
private static void GetXMLData()
private static void InsertXMLData()
private static void UpdateXMLData()
或使用 class 实例
Program p = new Program();
p.GetXMLData();
毫无疑问,代码中还有其他问题,但这应该可以帮助您入门。
这是我第一次使用C#创建程序。我如何 GetXMLData 然后在 xml 文件中更新数据后添加记录?这个程序没有return我的错误,但我看不到数据ID“4”已经被添加到记录中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace LinQ
{
class Program
{
private string path = "TestData.xml";
private void GetXMLData()
{
XDocument testXML = XDocument.Load(path);
var students = from student in testXML.Descendants("Student")
select new
{
ID = Convert.ToInt32(student.Attribute("ID").Value),
Name = student.Element("Name").Value
};
foreach (var student in students)
{
// Do other operations with each student object
}
}
private void InsertXMLData(string name)
{
XDocument testXML = XDocument.Load(path);
XElement newStudent = new XElement("Student",
new XElement("Name", name)
);
var lastStudent = testXML.Descendants("Student").Last();
int newID = Convert.ToInt32(lastStudent.Attribute("ID").Value);
newStudent.SetAttributeValue("ID", 4);
testXML.Element("Students").Add(newStudent);
testXML.Save(path);
}
private void UpdateXMLData(string name, int id)
{
XDocument testXML = XDocument.Load(path);
XElement cStudent = testXML.Descendants("Student").Where(c => c.Attribute("ID").Value.Equals(id.ToString())).FirstOrDefault();
cStudent.Element("Name").Value = name;
testXML.Save(path);
}
static void Main(string[] args)
{
//GetXMLData();
//InsertXMLData(string name);
}
}
}
您的 Main 函数没有执行任何操作。
改变
static void Main(string[] args)
{
//GetXMLData();
//InsertXMLData(string name);
}
到
static void Main(string[] args)
{
GetXMLData();
InsertXMLData("paul");
}
您还必须将方法设为静态。
改变
private void GetXMLData()
private void InsertXMLData(string name)
private void UpdateXMLData(string name, int id)
到
private static void GetXMLData()
private static void InsertXMLData(string name)
private static void UpdateXMLData(string name, int id)
如果你想访问你的方法而不使它们成为静态的,你必须创建你的对象的一个实例。 喜欢:
Program myProgram = new Program();
myProgram.GetXMLData();
myProgram.InsertXMLData("paul");
请为 xml 文件提供正确的路径或将其保存在 exe 位置。
以下是编译代码所需的更改
class Program
{
private static string path = "D:\TestData.xml";
static void Main(string[] args)
{
GetXMLData();
InsertXMLData("XYZ");
}
private static void GetXMLData()
{
// try
// {
XDocument testXML = XDocument.Load(path);
var students = from student in testXML.Descendants("Student")
select new
{
ID = Convert.ToInt32(student.Attribute("ID").Value),
Name = student.Element("Name").Value
};
foreach (var student in students)
{
// Do other operations with each student object
}
// }
//catch (Exception err)
//{
// MessageBox.Show(err.Message);
//}
}
private static void InsertXMLData(string name)
{
//try
//{
XDocument testXML = XDocument.Load(path);
XElement newStudent = new XElement("Student",
new XElement("Name", name)
);
var lastStudent = testXML.Descendants("Student").Last();
int newID = Convert.ToInt32(lastStudent.Attribute("ID").Value);
newStudent.SetAttributeValue("ID", 4);
testXML.Element("Students").Add(newStudent);
testXML.Save(path);
//}
//catch (Exception err)
//{
// MessageBox.Show(err.Message);
//}
}
private static void UpdateXMLData(string name, int id)
{
//try
//{
XDocument testXML = XDocument.Load(path);
XElement cStudent = testXML.Descendants("Student").Where(c => c.Attribute("ID").Value.Equals(id.ToString())).FirstOrDefault();
cStudent.Element("Name").Value = name;
testXML.Save(path);
//}
//catch (Exception err)
//{
// MessageBox.Show(err.Message);
//}
}
}
快速查看代码,似乎有两个问题可能导致应用程序无法正常执行。
首先,
Main()
中的方法调用已被注释掉,取消对这两个方法的注释(去掉前导//
)
其次,
函数 GetXMLData()
、InsertXMLData()
和 UpdateXMLData()
不是静态的,需要使用 class 实例。您可以通过添加关键字 static
或使用 class 实例来调用函数来解决此问题。
要么将函数定义更改为
private static void GetXMLData()
private static void InsertXMLData()
private static void UpdateXMLData()
或使用 class 实例
Program p = new Program();
p.GetXMLData();
毫无疑问,代码中还有其他问题,但这应该可以帮助您入门。