对于我的项目,我必须构建一个表示xml文件的数据结构。 我的想法是使用代表不同xml层的多个类。
我现在的问题是如何从最上层更改最低层中的数据。 在我的代码示例中有三个调用2个工作1没有。为什么最后一个不起作用?
是否有另一种组织数据的方式?
public class option
{
public string optionID;
public void setoptionID(string text)
{
optionID = text;
}
}
public class module
{
public option[] opt = new option[1];
private string moduleID;
public void setmoduleID(string text)
{
moduleID = text;
}
}
public class catalogitem
{
public module[] modul = new module[1];
private string ShortName;
public void setShortName(string text)
{
ShortName = text;
}
}
public class Katalog
{
private catalogitem[] items = new catalogitem[1];
public Katalog()
{
}
public void setcatalogitems()
{
items[0].setShortName("asdf"); //works
catalogitem.modul[0].setmoduleID("5"); //works
items[0].modul[0].setmoduleID("5"); //doesn't work
}
}
答案 0 :(得分:2)
对我来说,这三个陈述都不起作用。 您必须初始化对象本身,而不仅仅是数组。
items[0] = new catalogitem();
items[0].setShortName("asdf");
items[0].modul[0] = new module();
items[0].modul[0].setmoduleID("5");
但我还建议你在类和方法中使用属性而不是setShortName()/ setmoduleID()来添加和初始化子项。
当然这取决于规格/您的意图(我不知道),但这里有一种可能的实施方式,例如 CatalogItem。您可以读/写ShortName并枚举所有现有模块。我会拿一个列表,而不是数组。模块可以 只是逐个添加,你可以在真正添加之前检查它们:
public class CatalogItem
{
private readonly List<Module> mModuls;
public IEnumerable<Module> Moduls
{
get { return mModuls; }
}
public string ShortName { get; set; }
public CatalogItem()
{
mModuls = new List<Module>();
}
public void AddModule(Module module)
{
// Add a check that module is assigned.
mModuls.Add(module);
}
}
答案 1 :(得分:0)
一些建议
您的更新代码如下所示。
public class Option
{
public string OptionID { get; set;}
}
public class Module
{
// if you need only one Option, why not create one public Option object, instead of an Array
public Option Option = new Option();
public string ModuleID { get; set; }
}
public class CatalogItem
{
public Module Module = new Module();
public string ShortName { get; set; }
}
public class Katalog
{
private List<CatalogItem> items = new List<CatalogItem>();
public Katalog()
{
for(int i = 0; i < 10; i++)
items.Add(new CatalogItem());
}
public void SetCatalogItem()
{
foreach(CatalogItem ci in items)
{
ci.ShortName = "asdf";
ci.Module.ModuleID = "5";
}
}
}
很高兴帮忙!如果您觉得有帮助,请记得接受答案。