我有地址簿应用程序,想将最终结果写入文本文件。我很难将我的列表转换为数组,以便我可以执行 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/