Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象类型的转换_C#_Typeconverter - Fatal编程技术网

C# 对象类型的转换

C# 对象类型的转换,c#,typeconverter,C#,Typeconverter,我有一个Object response类型的方法参数。我正在使用以下命令遍历对象: foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(response)) { string name = descriptor.Name; object value = descriptor.GetValue(response); Console.WriteLine("{0}={1}", name,

我有一个Object response类型的方法参数。我正在使用以下命令遍历对象:

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

因为您知道类型,所以可以直接转换值:

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

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

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

你们读过关于c#中的协方差和逆变。试着使用它。我认为若值是继承属性,它会起作用。若我错了,请评论

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

你们读过关于c#中的协方差和逆变。试着使用它。我认为若值是继承属性,它会起作用。若我错了,请评论

 if (name.Contains("StatusData"))
    {
        //loop thorugh StatusDataReponse properties
        StatusDataReponse response = (StatusDataReponse)value;
        if (response != null)
        {
           // Use response as needed
        }
    }
直截了当地说:

    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))
            {
               ...
            }
        }
    }
直截了当地说:

    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))
            {
               ...
            }
        }
    }

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

  • 所有属性的名称都不是
    StatusData
    ,而是类型为
    StatusDataReponse
  • 名称为
    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
        }
    

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

  • 所有属性的名称都不是
    StatusData
    ,而是类型为
    StatusDataReponse
  • 名称为
    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
        }
    

    使用相同的foreach,只是做了一点小小的更改:
    TypeDescriptor.GetProperties(value)
    谢谢Andre……我知道它就在我面前的某个地方。谢谢你,先生!我会用同样的foreach把它作为一个答案发布,只是做了一点小小的改动:
    TypeDescriptor.GetProperties(value)
    谢谢安德烈……我知道它就在我面前的某个地方。谢谢你,先生!我会把它作为答案贴出来