c# - 转换为数组

标签 c# text-files

我有地址簿应用程序,想将最终结果写入文本文件。我很难将我的列表转换为数组,以便我可以执行 WriteAllLines 命令。

接口(interface):

abstract class PhoneBookCore {
    protected string _group;

    public PhoneBookCore(string group) {
        this._group=group;
    }

    public abstract void Add(PhoneBookCore d);
}

class Contect: PhoneBookCore {
    private string _firstName;
    private string _lastName;
    private string _phoneNumber;
    private string _addres;

    public Contect(string group, string firstName, string lastName, string phoneNumber, string addres)
        : base(group) {
        this._firstName=firstName;
        this._addres=addres;
        this._lastName=lastName;
        this._phoneNumber=phoneNumber;
    }
}

class Group: PhoneBookCore {
    private List<PhoneBookCore> elements=new List<PhoneBookCore>();

    public List<PhoneBookCore> elementsList {
        get;
        set;
    }

    public Group(string name)
        : base(name) {

    }

    public override void Add(PhoneBookCore d) {
        elements.Add(d);
    }
}

这是我卡住的地方

class DataOptins {
    public string Save(Group g) {
        foreach(var item in g) {
            string[] arr=g.elementsList.ToArray();  // <---- :(

        }
        System.IO.File.WriteAllLines(Path, arr); // <---- :(
    }
}

最佳答案

您的代码在很多方面都存在缺陷,但我现在将重点关注您的具体问题。

首先,您必须覆盖 Contect 类中的 ToString() 方法:

public override string ToString()
{
    return string.Format("{0}{1}{2}{1}{3}{1}{4}", _firstName, "\t", _lastName, _phoneNumber, _addres);
}

(这只是一个例子,当然有你自己的格式)

现在有这样的代码将列表变成字符串数组:

public string Save(Group g)
{
    string[] lines = g.elementsList.ConvertAll(p => p.ToString()).ToArray();
    System.IO.File.WriteAllLines(Path, lines );
}

现在有了这个和您当前的代码,您将得到一个异常,因为 g.elementsList 将始终为 null。为什么?因为你从不分配它。拥有其他私有(private)成员固然很好,但编译器无法知道当您调用 elementsList 时您实际上需要私有(private)成员 elements

将代码更改为:

private List<PhoneBookCore> elements = new List<PhoneBookCore>();
public List<PhoneBookCore> elementsList { get { return new List<PhoneBookCore>(elements); } }

而且您将不再有“空异常”。请注意,我使公共(public)属性返回列表的副本,以便调用代码无法更改您的私有(private)成员。

关于c# - 转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702858/

相关文章:

c# - 是否将 LINQ 上下文存储为请求变量?

c# - 表是可为空的 DateTime,但 DataSet 抛出异常?

c# - "Padding is invalid and cannot be removed"使用Aes解密密文时出错

c++ - 从 Linux 上生成的文件中删除 ^M

linux - 输出列格式排序 linux

c# - Asp.net(查找 2 个日期之间的记录)仅向远程服务器显示错误并在本地主机中正常工作

c# - 你能防止 WPF 样式被代码覆盖吗?

python - 如何根据输入的单词显示某些文件中的数据?

java - 如何在java中按类型将文本文件中的信息排序到数组中?

c - C中的结构体和指针