除了数组,我主要工作.我用[requiredField]属性标记属性来表示所需的字段.所以如果这是我的一些数据,
public enum EnumTest { Value1,Value2 } [DataContract] public class DummyWebserviceData { [DataMember] [requiredField] public EnumTest[] EnumTest{ get; set; } [DataMember] [requiredField] public DummyWebserviceData2[] ArrayOfData { get; set; } } [DataContract] public class DummyWebserviceData2 { [DataMember] [requiredField] public string FirstName { get; set;} [DataMember] [requiredField] public string LastName { get; set;} [DataMember] public string Description { get; set;} }
那我有什么工作?我有验证日期和字符串工作.它使用递归进行数据所需的任何级别.
但是…那么两个阵列呢?第一个是一个枚举数组.我想检查这种情况,数组不是空的.
第二个是DummyWebserviceData2值的数组.我需要拉出每个值,并分别看看.
为了简化我写的代码,看起来像这样,
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) { if (propertyInfo.PropertyType.IsArray) { // this craps out object[] array = (object[])propertyInfo.GetValue(data,new object[] { 0 }); } }
所以在我看来,第一件事是我可以告诉它是一个数组.但是我怎么能知道数组中有多少项?
解决方法
Array a = (Array)propertyInfo.GetValue(data); for(int i = 0; i< a.Length; i++) { object o = a.GetValue(i); }
您还可以遍历数组,从.Net 2.0起:
In the .NET Framework version 2.0,the Array class implements the System.Collections.Generic::IList,System.Collections.Generic::ICollection,and System.Collections.Generic::IEnumerable generic interfaces.
你不需要知道T,因为从这些你可以得到一个IEnumerable;然后您可以使用Cast()操作,或者确实只是在对象级别工作.
顺便说一下,你的代码不工作的原因是因为不能将MyType []的数组转换成object [],因为object []不是MyType [] – 仅对象的基本类型.
原文地址:https://www.jb51.cc/csharp/97059.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。