2013-05-21 139 views
0

我有一個Object響應類型的方法參數。我通過迭代使用對象:對象類型的轉換

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(response)) 
{ 
    string name = descriptor.Name; 
    object value = descriptor.GetValue(response); 

    Console.WriteLine("{0}={1}", name, value); 

    if (name.Contains("StatusData")) 
    { 
     //loop thorugh StatusDataReponse properties 
    } 

當對象包含StatusData的財產,我需要通過它的屬性,將其轉換爲StatusDataResponse和循環。我來自vb.net,不知道如何在c#中做到這一點。

+0

使用相同的foreach,這個小變化:'TypeDescriptor.GetProperties(值)' –

+0

感謝安德烈......我知道這是對我的面前地方。謝謝你,先生! – chdev77

+0

我會將其作爲答案發布 –

回答

0

真的簡單:

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(response)) 
    { 
     string name = descriptor.Name; 
     object value = descriptor.GetValue(response); 

     Console.WriteLine("{0}={1}", name, value); 

     if (name.Contains("StatusData")) 
     { 
      foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(value)) 
      { 
       ... 
      } 
     } 
    } 
4

既然你知道類型,你可以直接轉換值:

if (name.Contains("StatusData")) 
{ 
    //loop thorugh StatusDataReponse properties 
    StatusDataReponse response = value as StatusDataReponse; 
    if (response != null) 
    { 
     // Use response as needed 
    } 
} 
1

,你讀了C#。嘗試協方差和逆變使用this.I認爲,如果值是繼承property.If它會工作我錯了請評論。

if (name.Contains("StatusData")) 
    { 
     //loop thorugh StatusDataReponse properties 
     StatusDataReponse response = (StatusDataReponse)value; 
     if (response != null) 
     { 
      // Use response as needed 
     } 
    } 
0

如果我是你,我就不會在名稱檢查,只是檢查的類型。這樣,你是安全的:

  1. 使用其他名稱的所有屬性比StatusData但是這是StatusDataReponse類型。
  2. 名稱爲StatusData,但不屬於StatusDataReponse的所有屬性。

的exaple:

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(response)) 
{ 
    string name = descriptor.Name; 
    object value = descriptor.GetValue(response); 
    StatusDataReponse statusData = value as StatusDataReponse; 

    if (statusData == null) 
    { 
     Console.WriteLine("{0}={1}", name, value); 
    } 
    else 
    { 
     //loop thorugh StatusDataReponse properties 
    }