我目前正在编写一个Lib来使用HttpWebRequest类和属性。在调用某些方法之后,我将需要重构类的HttpWebRequest属性,但不是从头开始。
这就是我想要完成的:
-
从现有的HttpWebRequest 备份属性
System.Reflection.PropertyInfo[]属性=m_HttpWebRequest.GetType().GetProperties();
-
重新实例化属性,创建一个新的WebRequest
m_HttpWebRequest=(HttpWebRequest)WebRequest.Create(requestUrl);
-
将复制的属性添加到新实例中。我还不能做到。
对如何实施第三步有什么想法吗?目前,我可以通过使用获得每个物业的名称
properties[index].Name
但我不能引用这个值。
这应该会让你大致达到目标:
foreach(var prop in m_HttpWebRequest.GetType().GetProperties())
{
if(!(prop.CanWrite && prop.CanRead))
continue;
var val = prop.GetValue(m_HttpWebRequest, BindingFlags.GetProperty, null, null, null);
if (val == null)
continue;
prop.SetValue(m_HttpWebRequest2, val, BindingFlags.SetProperty, null, null, null);
}
您尝试过吗:
var value = propertyInfo.GetValue(m_HttpWebRequest, null);
您的案例:
foreach (PropertyInfo propertyInfo in m_HttpWebRequest.GetType().GetProperties())
{
if (propertyInfo.GetValue(m_HttpWebRequest, null) != null) propertyInfo.SetValue(m_HttpWebRequest2,propertyInfo.GetValue(m_HttpWebRequest, null), null);
}
阅读更多信息:
http://msdn.microsoft.com/en-us/library/b05d59ty.aspx