我正在寫一些驗證代碼。該代碼將傳遞到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 });
}
}
所以,在我看來,第一件事是,我可以告訴它是一個數組。但是,我怎麼能告訴陣列中有多少物品?
請注意,您不能使用IList或ICollection接口實現修改數組內容 - 正如前面提到的MDSN主題所述 - 它們都會拋出「NotSupportedException」 – 2010-09-19 21:52:06
正確。我研究並發現了上面提到的許多相同的東西。我所做的確保數組的秩是1,否則數組可能是Array [] []。儘管感謝您的幫助。非常感激。 – peter 2010-09-19 22:00:34
對Cast()'建議+1。 'MyType [] a =((Array)propertyInfo.GetValue(data))。Cast().ToArray();' –
2010-09-19 22:55:39