我需要访问数组中的列表元素以获取“Message”字符串,如下所示:
string msg0 = sender.SyncHelper.UploadSyncProgressList[0].Results.Exception.Message;
string msg1 = sender.SyncHelper.UploadSyncProgressList[1].Results.Exception.Message;
...
我获得了“sender”对象(类型为“object”)。其余的(SyncHelper,UploadSyncProgressList,Results,Exception和Message)都是非公开的。对于这些,它们的类类型也是非公共类型(“异常”除外)。
此image显示问题的直观表示。
我已经设法使用反射来使用以下代码获取列表变量“UploadSyncProgressList”,但我仍然坚持如何遍历列表元素以获取“Messages”字符串:
PropertyInfo syncHelperInfo = sender.GetType().GetProperty("SyncHelper", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
object syncHelper = syncHelperInfo.GetValue(sender, null);
PropertyInfo uploadProgressSyncListInfo = syncHelper.GetType().GetProperty("UploadSyncProgressList", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
object uploadProgressSyncList = uploadProgressSyncListInfo.GetValue(syncHelper, null);
如何循环“uploadProgressSyncList”元素以获取“消息”字符串?
我这样做是因为我需要访问隐藏在第三方库中的低级网络错误消息。
提前致谢!
答案 0 :(得分:1)
这里你没什么选择。
因为UploadSyncProgressList是List<ESRI...EventArgs>
的类型,它实现了以下集合接口
<强>通用强>
IList<T>
IEnumerable<T>
ICollection<T>
IReadOnlyList<T>
IReadOnlyCollection<T>
非通用
IEnumerable
ICollection
IList
因此,如果上下文中的EventArgs是公共的,那么您可以将结果uploadProgressSyncList
转换为任何通用接口
例如
IList<ESRI...EventArgs> syncList = (IList<ESRI...EventArgs>)uploadProgressSyncList;
您可以使用上面适合您需要的任何通用界面
如果事件arg类型不公开,那么非通用是您的选择
IList syncList = (IList)uploadProgressSyncList;
使用IList
IList<T>
和IReadOnlyList<T>
界面将帮助您通过索引进行检索
例如
var arg1 = syncList[0];
对于以上所有内容,您可以使用foreach
进行迭代例如
foreach(var arg in syncList)
{
//your logic with arg
}