0

您好,我正在尝试保存已创建的对象并将其返回给我错误:“表示为一系列 Unicode 字符”在这一行:System.IO.File.WriteAllLines(@"C:\Users\1\AppData\Roaming\MYDATA\hi.txt", somOne);

这是代码:

主类:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Persone somOne = new Persone("bob", 5, 200);
            System.IO.Directory.CreateDirectory(@"C:\Users\1\AppData\Roaming\MYDATA");
            // the Error line Is HERE \/
            System.IO.File.WriteAllLines(@"C:\Users\1\AppData\Roaming\MYDATA\hi.txt", somOne);
        }
    }
}

人物类:

namespace ConsoleApplication1
{
    class Persone
    {
        private String name;
        private int id;
        private int age;
        public Persone(String name, int id, int age)
        {
            setName(name);
            setId(id);
            setAge(age);

        }
        public void setName(String name)
        {
            this.name = name;
        }
        public String getName()
        {
            return name;
        }
        public void setId(int id)
        {
            this.id = id;
        }
        public int getId()
        {
            return id;
        }
        public void setAge(int age)
        {
            this.age = age;
        }
        public int getAge()
        {
            return age;
        }
    }
}

我需要更改“somOne”的类型吗?如何?

4

4 回答 4

4

System.IO.File.WriteAllLines 期望字符串数组(或 IEnumerable<string>)作为第二个参数,因此您拥有的代码甚至不应该编译。您可以在 Person 类中添加如下内容:

public string[] ToStringArray()
 {
     //And put it everything you need to store
     return new[] {name, id.ToString(), age.ToString()};
 }

并像这样调用:

System.IO.File.WriteAllLines(@"C:\Users\1\AppData\Roaming\MYDATA\hi.txt", somOne.ToStringArray());
于 2013-11-08T21:07:25.810 回答
1

您不能只保存这样的对象。它们不会自动格式化自己以保存到磁盘。

您想查看序列化或覆盖.ToString()类的方法并File.WriteAllText()改为使用。

于 2013-11-08T21:07:45.530 回答
0

根据 MSDN,File.WriteAllLines需要 aIEnumerable<string>或 astring[]作为输入(完整签名是File.WriteAllLines(string, IEnumberable<string>)orFile.WriteAllLines(string, string[])其中第一个字符串是路径,第二个是您希望编写的行集。

传递你的Persone对象是不一样的。至少你需要在你的对象上覆盖 .ToString() ,最好是编写一个新方法.WritePersone()或类似的东西。

对于第一个,您可以像这样调用 WriteAllLines:

System.IO.File.WriteAllLines(@"C:\Users\1\AppData\Roaming\MYDATA\hi.txt",
   new string[] {somOne.ToString()});
于 2013-11-08T21:09:19.483 回答
0

我希望我能正确地回答你的问题。这样

        // the Error line Is HERE \/
        System.IO.File.WriteAllLines(@"C:\Users\1\AppData\Roaming\MYDATA\hi.txt", somOne);

你是说你在上面的行中遇到错误?

你应该在那里有一个编译时错误。WriteAllLines 的第二个参数采用一个数组或 IEnumerable 字符串。

尝试将此添加到您的 Persone 类

public string[] Dump()
{
    string[] tmp = new string[3];
    tmp[0] = id.ToString();
    tmp[1] = name;
    tmp[2] = age.ToString();
    return tmp;
}

然后使用写入文件

System.IO.File.WriteAllLines(@"C:\Users\1\AppData\Roaming\MYDATA\hi.txt", someone.Dump());
于 2013-11-08T21:16:12.923 回答