列出存储在AppDomain中的所有自定义数据
为了在发生错误时存储进程状态,我想列出存储在AppDomain中的所有(自定义)数据(通过SetData)。 LocalStore属性是私有的,AppDomain类不可inheritance。 有没有办法枚举这些数据?
AppDomain domain = AppDomain.CurrentDomain; domain.SetData("testKey", "testValue"); FieldInfo[] fieldInfoArr = domain.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo fieldInfo in fieldInfoArr) { if (string.Compare(fieldInfo.Name, "_LocalStore", true) != 0) continue; Object value = fieldInfo.GetValue(domain); if (!(value is Dictionary)) return; Dictionary localStore = (Dictionary)value; foreach (var item in localStore) { Object[] values = (Object[])item.Value; foreach (var val in values) { if (val == null) continue; Console.WriteLine(item.Key + " " + val.ToString()); } } }
基于Frank59的答案,但更简洁:
var appDomain = AppDomain.CurrentDomain; var flags = BindingFlags.NonPublic | BindingFlags.Instance; var fieldInfo = appDomain.GetType().GetField("_LocalStore", flags); if (fieldInfo == null) return; var localStore = fieldInfo.GetValue(appDomain) as Dictionary; if (localStore == null) return; foreach (var key in localStore.Keys) { var nonNullValues = localStore[key].Where(v => v != null); Console.WriteLine(key + ": " + string.Join(", ", nonNullValues)); }
相同的解决方案,但作为F#扩展方法。 可能不需要空检查。 https://gist.github.com/ctaggart/30555d3faf94b4d0ff98
type AppDomain with member x.LocalStore with get() = let f = x.GetType().GetField("_LocalStore", BindingFlags.NonPublic
BindingFlags.Instance) if f = null then Dictionary
上述就是C#学习教程:列出存储在AppDomain中的所有自定义数据分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1033441.html