C# 对象类型的转换
我有一个Object response类型的方法参数。我正在使用以下命令遍历对象: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,
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)
谢谢安德烈……我知道它就在我面前的某个地方。谢谢你,先生!我会把它作为答案贴出来