由于SGIP的SUBMIT命令大约有22个字段,刚开始测试的时候是手动组包,测试通过发送成功后觉得应该有个简单的办法,不要这样变态的:stmp="0"; Array.Copy(encoder.GetBytes(stmp),0,tmpmsg,offset,stmp.Length);//source_addr offset+=6; 想来想去,从FOREACH想到遍历,然后就找资料,遍历类的公共成员变量,我一向讨厌那个动不动就GET SET,明明什么都没有干,也要GET SET一遍。 SGIPSubmitStruct d=new SGIPSubmitStruct(); d.spnum="123"; Type MyType = d.GetType(); FieldInfo[] fields = MyType.GetFields( BindingFlags.Instance &line;BindingFlags.Public &line; BindingFlags.GetField ); for (int i = 0; i < fields.Length; i++) { Trace.WriteLine(fields[i].Name);Trace.WriteLine(fields[i].GetValue(d)); } Instance 指定实例成员将包括在搜索中。 FieldInfo 类 [C#]请参见 发现字段特性并提供对字段元数据的访问权。 从元数据中获取字段信息。FieldInfo 没有公共构造函数。通过调用 Type 对象的 GetFields 或 GetField 方法获取 FieldInfo 对象。 字段是在类中定义的变量。FieldInfo 提供对类中字段的元数据的访问权并为字段提供动态 set 和 get 功能。直到在对象上调用了 invoke 或 get 时,该类才加载到内存中。 using System; using System.Reflection; public class FieldInfoClass { public int myField1 = 0; protected string myField2 = null; public static void Main() { FieldInfo[] myFieldInfo; Type myType = typeof(FieldInfoClass); // Get the type and fields of FieldInfoClass. myFieldInfo = myType.GetFields(BindingFlags.NonPublic &line; BindingFlags.Instance &line; BindingFlags.Public); Console.WriteLine("\nThe fields of " + "FieldInfoClass are \n"); // Display the field information of FieldInfoClass. for(int i = 0; i < myFieldInfo.Length; i++) { Console.WriteLine("\nName : { 0 }", myFieldInfo[i].Name); Console.WriteLine("Declaring Type : { 0 }", myFieldInfo[i].DeclaringType); Console.WriteLine("IsPublic : { 0 }", myFieldInfo[i].IsPublic); Console.WriteLine("MemberType : { 0 }", myFieldInfo[i].MemberType); Console.WriteLine("FieldType : { 0 }", myFieldInfo[i].FieldType); Console.WriteLine("IsFamily : { 0 }", myFieldInfo[i].IsFamily); } } }
字体:大 中 小 |