C# 通过将属性转换为列表获取空列表
我有以下属性类别:C# 通过将属性转换为列表获取空列表,c#,xml,properties,C#,Xml,Properties,我有以下属性类别: public class Ctas { private string _CodAgrup; public string CodAgrup { get { return _CodAgrup; } set { _CodAgrup = value; } } private string _NumCta; public strin
public class Ctas
{
private string _CodAgrup;
public string CodAgrup
{
get { return _CodAgrup; }
set { _CodAgrup = value; }
}
private string _NumCta;
public string NumCta
{
get { return _NumCta; }
set { _NumCta = value; }
}
private string _Desc;
public string Desc
{
get { return _Desc; }
set { _Desc = value; }
}
private string _subctade;
public string SubCtaDe
{
get { return _subctade; }
set { _subctade = value; }
}
private string _Nivel;
public string Nivel
{
get { return _Nivel; }
set { _Nivel = value; }
}
private string _Natur;
public string Natur
{
get { return _Natur; }
set { _Natur = value; }
}
public override string ToString()
{
return "CodAgrup = " + CodAgrup + ", NumCta = " + NumCta + ", Desc = " + Desc + ", SubCtaDe = " + SubCtaDe + ", Nivel = " + Nivel + ", Natur = " + Natur;
}
#endregion
}
我已经从这些属性创建了一个XML,所以首先我必须填充属性,然后我得到了下一个填充属性的方法,第一个问题是,我填充属性的方法正确吗?
//Insert n data on properties
static void cuenta(string codagroup, string numcta, string desc, string subctade, string nivel, string natur)
{
Ctas cuentas = new Ctas();
int x = 0;
while (cuentas.CodAgrup != null)
{
cuentas.CodAgrup.Insert(x, "codagroup");
cuentas.NumCta.Insert(x, "numcta");
cuentas.Desc.Insert(x, "desc");
cuentas.SubCtaDe.Insert(x,"subctade");
cuentas.Nivel.Insert(x, "nivel");
cuentas.Natur.Insert(x, "natur");
x = x + 1;
}
}
//Converting propierties data into list
List<string> coda = cuentas.CodAgrup.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> ncta = cuentas.NumCta.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> desc = cuentas.Desc.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> subdes = cuentas.SubCtaDe.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> nivel = cuentas.Nivel.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> natur = cuentas.Natur.GetType().GetProperties().Select(p => p.Name).ToList();
//Create XML from data in list´s
for (int i = 0; i < coda.Count; i++)
{
xmlWriter.WriteAttributeString("CodAgrup", coda[i]);
xmlWriter.WriteAttributeString("NumCta", ncta[i]);
xmlWriter.WriteAttributeString("Desc", desc[i]);
//write the atribute when property data exists.
if (cuentas.SubCtaDe != null)
{
xmlWriter.WriteAttributeString("SubCtaDe", subdes[i]);
}
xmlWriter.WriteAttributeString("Nivel", nivel[i]);
xmlWriter.WriteAttributeString("Natur", natur[i]);
xmlWriter.WriteEndElement();
}
然后我应该检索数据并将其写入XML文件,这样我就可以将属性数据转换成一个列表,然后将它们作为一个属性写入,但当我调试时,我发现列表是空的,这是为什么?最好的方法是什么?
//Insert n data on properties
static void cuenta(string codagroup, string numcta, string desc, string subctade, string nivel, string natur)
{
Ctas cuentas = new Ctas();
int x = 0;
while (cuentas.CodAgrup != null)
{
cuentas.CodAgrup.Insert(x, "codagroup");
cuentas.NumCta.Insert(x, "numcta");
cuentas.Desc.Insert(x, "desc");
cuentas.SubCtaDe.Insert(x,"subctade");
cuentas.Nivel.Insert(x, "nivel");
cuentas.Natur.Insert(x, "natur");
x = x + 1;
}
}
//Converting propierties data into list
List<string> coda = cuentas.CodAgrup.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> ncta = cuentas.NumCta.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> desc = cuentas.Desc.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> subdes = cuentas.SubCtaDe.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> nivel = cuentas.Nivel.GetType().GetProperties().Select(p => p.Name).ToList();
List<string> natur = cuentas.Natur.GetType().GetProperties().Select(p => p.Name).ToList();
//Create XML from data in list´s
for (int i = 0; i < coda.Count; i++)
{
xmlWriter.WriteAttributeString("CodAgrup", coda[i]);
xmlWriter.WriteAttributeString("NumCta", ncta[i]);
xmlWriter.WriteAttributeString("Desc", desc[i]);
//write the atribute when property data exists.
if (cuentas.SubCtaDe != null)
{
xmlWriter.WriteAttributeString("SubCtaDe", subdes[i]);
}
xmlWriter.WriteAttributeString("Nivel", nivel[i]);
xmlWriter.WriteAttributeString("Natur", natur[i]);
xmlWriter.WriteEndElement();
}
//在属性上插入n个数据
静态无效提示(字符串codagroup、字符串numcta、字符串desc、字符串子代码、字符串nivel、字符串natur)
{
Ctas cuentas=新Ctas();
int x=0;
while(cuentas.CodAgrup!=null)
{
cuentas.CodAgrup.插入(x,“CodAgrup”);
cuentas.NumCta.插入(x,“NumCta”);
说明插入(x,“说明”);
cuentas.Substade.插入(x,“Substade”);
cuentas.Nivel.插入(x,“Nivel”);
插入(x,“自然”);
x=x+1;
}
}
//将属性数据转换为列表
List coda=cuentas.CodAgrup.GetType().GetProperties().Select(p=>p.Name.ToList();
List ncta=cuentas.NumCta.GetType().GetProperties().Select(p=>p.Name.ToList();
List desc=cuentas.desc.GetType().GetProperties().Select(p=>p.Name.ToList();
List subdes=cuentas.substade.GetType().GetProperties().Select(p=>p.Name.ToList();
List nivel=cuentas.nivel.GetType().GetProperties().Select(p=>p.Name.ToList();
List natur=cuentas.natur.GetType().GetProperties().Select(p=>p.Name.ToList();
//从列表中的数据创建XML
对于(int i=0;i
您的代码令人困惑,但如果我理解正确,以下是我看到的第一个错误:
Ctas cuentas = new Ctas();
int x = 0;
while (cuentas.CodAgrup != null) // cuentas.CodAgrup is null from the beginning!
{
cuentas.CodAgrup.Insert(x, "codagroup");
cuentas.NumCta.Insert(x, "numcta");
cuentas.Desc.Insert(x, "desc");
cuentas.SubCtaDe.Insert(x,"subctade");
cuentas.Nivel.Insert(x, "nivel");
cuentas.Natur.Insert(x, "natur");
x = x + 1;
}
由于您正在查看一个全新的Ctas
对象,并且没有用于初始化CodAgrup
属性的代码,因此它的默认值为null
,因此在循环时,代码永远不会进入
即使它这样做了,我也怀疑这将是一个无止境的循环,因为您正在将一个文本值插入到字符串属性中,并且我看不到cuentas.CodAgrup
将永远为空的条件
至于XML生成,为什么不使用内置的XmlSerializer
类呢?即使您需要特定的格式,也有一些属性可以让您自定义生成的XML。while循环中的代码永远不会执行,因为cuentas。如果在实例化cuentas
后不初始化它,CodAgrup
将为空。您是对的,应该没有引号,顺便说一句,我知道该怎么做了,如果输入的数据数量未知,如何填充属性?。