转换对象类型

时间:2013-05-21 17:14:57

标签: c# typeconverter

我有一个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#中执行此操作。

4 个答案:

答案 0 :(得分:4)

由于您知道类型,因此可以直接转换值:

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

答案 1 :(得分:1)

你在c#中读到了协方差和逆变。尝试使用它。我认为如果值是继承属性它将起作用。如果我错了请评论。

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

答案 2 :(得分: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))
            {
               ...
            }
        }
    }

答案 3 :(得分:0)

如果我是你,我不会检查名称,只需检查类型。这样你就安全了:

  1. 所有属性的名称不是StatusData,但类型为StatusDataReponse
  2. 名称为StatusData但属于StatusDataReponse类型的所有属性。
  3. 的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
        }