使用构造函数将文件路径传递给方法

Passing a filepath to method using constructor

提问人:Alice 提问时间:3/24/2021 最后编辑:Stan1kAlice 更新时间:3/24/2021 访问量:486

问:

我是C#和.NET的新手,所以我在传递非直接路径时遇到了一些困难。

我有两种方法可以处理XML文件(添加和读取数据),在那里我直接将文件的路径作为参数(@“D:\GIT\learning\DAL\Users.xml”)传递。
如何使用 ?
Constructor

class UserRepository : IUserRepository
    {
        public void ReadData() 
        { 
            List<User> usersList = new List<User>();
            Console.WriteLine("Name-Surname-Age");
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(@"D:\GIT\learning\DAL\Users.xml");
            XmlElement xnode = xmlDocument.DocumentElement;

            XmlElement elementUser = xmlDocument.CreateElement("user");

            XmlElement elementName = xmlDocument.CreateElement("name");
            XmlElement elementSurname = xmlDocument.CreateElement("surname");
            XmlElement elementAge = xmlDocument.CreateElement("age");

            Console.WriteLine("Enter name");
            string name = Convert.ToString(Console.ReadLine());
            Console.WriteLine("Enter surname");
            string surname = Convert.ToString(Console.ReadLine());
            Console.WriteLine("Enter age");
            string age = Convert.ToString(Console.ReadLine());

            XmlText nameText = xmlDocument.CreateTextNode(name);
            XmlText surnameText = xmlDocument.CreateTextNode(surname);
            XmlText ageText = xmlDocument.CreateTextNode(age);

            elementName.AppendChild(nameText);
            elementSurname.AppendChild(surnameText);
            elementAge.AppendChild(ageText);

            elementUser.AppendChild(elementName);
            elementUser.AppendChild(elementSurname);
            elementUser.AppendChild(elementAge);

            xmlDocument.Save(@"D:\GIT\learning\DAL\Users.xml");
        }

        public void PrintData(User userData)
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(@"D:\GIT\learning\DAL\Users.xml");
            List<User> users = new List<User>();
            XmlElement xRoot = xml.DocumentElement;
            foreach (XmlNode xnode in xRoot)
            {
                User user = new User();

                foreach (XmlNode childnode in xnode.ChildNodes)
                {
                    if (childnode.Name.Equals("name"))
                        user.Name = childnode.InnerText;
                    if (childnode.Name.Equals("surname"))
                        user.Surname = childnode.InnerText;
                    if (childnode.Name.Equals("age"))
                        user.Age = childnode.InnerText;
                }
            }
            foreach (User u in users)
            {
                Console.WriteLine($"Name: {u.Name}, Surname: {u.Surname}, Age: {u.Age}");
            }
        }
    }
C# XML 文件

评论

0赞 Andrea Scarcella 3/24/2021
你的意思是:将路径传递给类 UserRepository 的构造函数,然后在您的方法中使用它,对吗?
0赞 Alice 3/24/2021
是的,没错

答:

2赞 Andrea Scarcella 3/24/2021 #1

为了清楚起见,只剩下相关位

class UserRepository : IUserRepository {
   private string _path="";
   public UserRepository (string path){
       _path=path;
   }
}

在这两种方法中,将 _path 作为参数传递给 xmlDocument.Load,例如:

取代

xmlDocument.Load(@"D:\GIT\learning\DAL\Users.xml"); 

在这两种方法中

xmlDocument.Load(_path); 

评论

1赞 Alice 3/24/2021
我能看到它。非常感谢!!
1赞 Stan1k 3/24/2021 #2

示例代码:

  class UserRepository : IUserRepository
    {
       private string XmlFilePath;

       public UserRepository(string xmlFilePath)
       {
           XmlFilePath = xmlFilePath;
       }

       public void ReadData(string filePath) 
       { 
           xmlDocument.Load(filePath);
       }
    }

在这里,你的类中有一个私有字段,该字段在构造函数中初始化。
从您的类创建新对象时,将设置该值。
UserRepository