加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何处理使用反射的数组

发布时间:2020-12-15 17:49:15 所属栏目:百科 来源:网络整理
导读:我正在编写一些验证码.代码将把数据传递到Web服务中,并决定是否可以执行该操作,或者向调用者返回一个消息,这些消息已经丢失了一些字段. 除了数组,我主要工作.我用[RequiredField]属性标记属性来表示所需的字段.所以如果这是我的一些数据, public enum EnumTe
我正在编写一些验证码.代码将把数据传递到Web服务中,并决定是否可以执行该操作,或者向调用者返回一个消息,这些消息已经丢失了一些字段.

除了数组,我主要工作.我用[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数据类型( this MSDN topic details that)动态地分类,因此您不需要反映到数组中,可以将对象转换为Array,然后使用Array.GetValue实例方法:
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 [] – 仅对象的基本类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读