public struct EconomicPara
{
public double CityBuildingTax;
public double EducationTax;
public double ElectionCost;
public int MeasureUnUsefulDays;
public int MeasureUsefulDays;
public double MineCost;
public double OilChangeCost;
public double OilHandleCost;
public double OilPrice;
public int ProductionBaseLineDays;
public double PutInError;
public double ResoursesTax;
public double StoreCost;
public double ValueAddedTax;
public double WaterCost;
public double[] OilProductBaseLine;
public double[] OilPerDay;
public int OilPerDayCount;
public int MeasureCount;
public int[] MeasureSign;
public double[] MeasureCost;
public DateTime[] OilProductionDay;
public int SpanYearsUseful;
public bool[] MeasureUseful;
public bool[] MeasureEconomicUseful;
public double[] InOutRadio;
public int[] MeasureDays;
public DateTime[] MeasureStartDay;
}要遍历这个结构体把里边的数据写到XML中,怎么遍历啊?
大侠们支支招
{
Type type = typeof(TEmployee);
foreach (FieldInfo mi in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
richTextBox1.Text += "\r\n" + mi.Name;
}
struct TEmployee
{
string idno;
string name;
int age;
string memo;
}
试试这个吧,刚找的
this.GetType().Members; 等
以外 你还可以考虑使用自定义 迭代器比如public struct EconomicPara
{
public double CityBuildingTax;
public double EducationTax;
public double ElectionCost;
public int MeasureUnUsefulDays;
public int MeasureUsefulDays;
public double MineCost;
public double OilChangeCost;
public double OilHandleCost;
public double OilPrice;
public int ProductionBaseLineDays;
public double PutInError;
public double ResoursesTax;
public double StoreCost;
public double ValueAddedTax;
public double WaterCost;
public double[] OilProductBaseLine;
public double[] OilPerDay;
public int OilPerDayCount;
public int MeasureCount;
public int[] MeasureSign;
public double[] MeasureCost;
public DateTime[] OilProductionDay;
public int SpanYearsUseful;
public bool[] MeasureUseful;
public bool[] MeasureEconomicUseful;
public double[] InOutRadio;
public int[] MeasureDays;
public DateTime[] MeasureStartDay;
}
public static class ex {
public static IEnumerable<object> GetMember(this EconomicPara ep) {
yield return ep.CityBuildingTax;
yield return ep.EducationTax;
yield return ep.ElectionCost;
//yeild return ep.InOutRadio;
yield return ep.MeasureCost;
yield return ep.MeasureCount;
//...挨到写完ep所有的成员当然你可以根据成员类型自己酌情搞一搞。
}
}
使用扩展方法搞定,不用修改原来定义
//添加测试数据
private void button1_Click(object sender, EventArgs e)
{
List<Test> li=new List<Test>();
Test t = new Test();
t.Name = "test";
t.Pwd = "test";
t.Age = 18;
li.Add(t);
this.getList(li);
}
//遍历
private void getList(List<Test> li)
{
foreach (Test dinosaur in li)
{
MessageBox.Show(dinosaur.Name + dinosaur.Pwd + dinosaur.Age.ToString());
}
}
public struct Test
{
private string name; public string Name
{
get { return name; }
set { name = value; }
}
private string pwd; public string Pwd
{
get { return pwd; }
set { pwd = value; }
}
private int age; public int Age
{
get { return age; }
set { age = value; }
}
}用泛型做的
(菜鸟路过)
这位大侠,mi.GetValue(myobject)怎么接到数组的值?
{
string idno;
string name;
int age;
string memo;
string []myCount;
}
richTextBox1.Text += "\r\n" + mi.Name+mi.GetValue(myObject);
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;namespace WindowsApplication183
{
public partial class Form1 : Form
{
public struct EconomicPara
{
public double CityBuildingTax;
public double EducationTax;
public double ElectionCost;
public int MeasureUnUsefulDays;
public int MeasureUsefulDays;
public double MineCost;
public double OilChangeCost;
public double OilHandleCost;
public double OilPrice;
public int ProductionBaseLineDays;
public double PutInError;
public double ResoursesTax;
public double StoreCost;
public double ValueAddedTax;
public double WaterCost;
public double[] OilProductBaseLine;
public double[] OilPerDay;
public int OilPerDayCount;
public int MeasureCount;
public int[] MeasureSign;
public double[] MeasureCost;
public DateTime[] OilProductionDay;
public int SpanYearsUseful;
public bool[] MeasureUseful;
public bool[] MeasureEconomicUseful;
public double[] InOutRadio;
public int[] MeasureDays;
public DateTime[] MeasureStartDay;
} public Form1()
{
InitializeComponent(); EconomicPara EP = new EconomicPara();
EP.CityBuildingTax = 1;
EP.EducationTax = 2;
EP.ElectionCost = 3;
EP.InOutRadio = new double[] { 4, 44 };
EP.MeasureCost = new double[] { 5, 55 };
EP.MeasureCount = 6;
EP.MeasureDays = new int[] { 7, 77 };
EP.MeasureEconomicUseful = new bool[] { true };
EP.MeasureSign = new int[] { 9, 99 };
EP.MeasureStartDay = new DateTime[] { DateTime.Now };
EP.MeasureUnUsefulDays = 11;
EP.MeasureUseful = new bool[] { false };
EP.MeasureUsefulDays = 13;
EP.MineCost = 14;
EP.OilChangeCost = 15;
EP.OilHandleCost = 16;
EP.OilPerDay = new double[] { 17, 1717 };
EP.OilPerDayCount = 18;
EP.OilPrice = 19;
EP.OilProductBaseLine = new double[] { 20, 2020 };
EP.OilProductionDay = new DateTime[] { DateTime.Now };
EP.ProductionBaseLineDays = 22;
EP.PutInError = 23;
EP.ResoursesTax = 24;
EP.SpanYearsUseful = 25;
EP.StoreCost = 26;
EP.ValueAddedTax = 27;
EP.WaterCost = 28; foreach (FieldInfo FI in this.GetType().GetNestedType("EconomicPara").GetFields())
{
Object Value = FI.GetValue(EP); String S = "字段: " + FI.Name + Environment.NewLine
+ "类型: " + FI.FieldType.Name + Environment.NewLine
+ "值: " + Value.ToString() + Environment.NewLine; if (Value.GetType().IsArray)
{
Array A = (Array)Value;
S += "子值: "; for (int i = 0; i < A.Length; i++)
{
S += A.GetValue(i).ToString();
if (i < A.Length - 1)
S += ",";
}
} MessageBox.Show(S);
}
}
}
}
你可以用序列化类,直接就可以写到XML文件里了,而且还可以直接从XML文件里,读出来,反序列化成类实例给你一段序列化的代码 public static string ObjectToXML( Object Instance )
{
MemoryStream stream = null;
TextWriter writer = null;
string ObjectXml = string.Empty;
try
{
stream = new MemoryStream(); // read xml in memory
writer = new StreamWriter( stream, Encoding.UTF8 ); // get serialise object
Type t = Instance.GetType();
XmlSerializer serializer = new XmlSerializer( t ); XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
xsn.Add( string.Empty, string.Empty ); serializer.Serialize( writer, Instance, xsn ); // read object
int count = ( int )stream.Length; // saves object in memory stream
byte[] arr = new byte[count];
stream.Seek( 0, SeekOrigin.Begin );
// copy stream contents in byte array
stream.Read( arr, 0, count );
//UnicodeEncoding utf = new UnicodeEncoding(); // convert byte array to string
UTF8Encoding utf = new UTF8Encoding();
ObjectXml = utf.GetString( arr ).Trim();
}
catch ( Exception ex )
{
string ss = ex.Message;
}
finally
{
if ( stream != null && stream.Length > 0 )
{
stream.Close();
}
if ( writer != null )
{
writer.Close();
}
} return ObjectXml;
}使用就是
string xml = ObjectToXML(结构体变量);