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"))
    {
        //loop thorugh StatusDataReponse properties
    }

当对象包含 StatusData 的属性时,我需要将其转换为 StatusDataResponse 并遍历它的属性。我来自 vb.net,不知道如何在 c# 中执行此操作。

4

4 回答 4

4

既然你知道类型,你可以直接转换值:

if (name.Contains("StatusData"))
{
    //loop thorugh StatusDataReponse properties
    StatusDataReponse response = value as StatusDataReponse;
    if (response != null)
    {
       // Use response as needed
    }
}
于 2013-05-21T17:17:55.300 回答
1

您在 c# 中阅读了有关协变和逆变的内容。尝试使用它。我认为如果值是继承属性,它将起作用。如果我错了,请发表评论。

 if (name.Contains("StatusData"))
    {
        //loop thorugh StatusDataReponse properties
        StatusDataReponse response = (StatusDataReponse)value;
        if (response != null)
        {
           // Use response as needed
        }
    }
于 2013-05-21T17:46:02.570 回答
0

如果我是你,我不会检查名字,而只会检查类型。这样您就可以安全:

  1. 具有其他名称StatusData但类型为 的所有属性StatusDataReponse
  2. 所有具有名称StatusData但不是类型的属性StatusDataReponse

例如:

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
    }
于 2013-05-21T18:21:42.137 回答
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))
            {
               ...
            }
        }
    }
于 2013-05-21T18:14:42.727 回答