我如何 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();

毫无疑问,代码中还有其他问题,但这应该可以帮助您入门。