对象类型的转换
本文关键字:转换 类型 对象 | 更新日期: 2023-09-27 18:14:35
我有一个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
}
}
你读过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))
{
...
}
}
}
如果我是你,我不会检查名字,而只检查类型。这样你就安全了:
- 所有名称与
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
}