public IEnumerable<ExceptionSources> this [MemberReference member] { get { if (member == null) throw new ArgumentNullException ("member"); MemberReference memberDef = member.Resolve (); if (memberDef == null) { ArrayType array = member.DeclaringType as ArrayType; if (array != null && array.Rank > 1) { // Multi-dimensional array; the member is runtime generated, // doesn't "really" exist (in a form that we can resolve), // so we can't do anything further. return new ExceptionSources[0]; } throw new NotSupportedException (string.Format ( "Unable to resolve member {0}::{1}.", member.DeclaringType.FullName, member.Name)); } string memberDecl = xdoc.GetDeclaration (member.Resolve ()); Dictionary<string, ExceptionSources> e; if (!db.TryGetValue (memberDecl, out e)) { e = new Dictionary<string, ExceptionSources> (); var bodies = GetMethodBodies (member); foreach (var body in bodies) { if (body == null) continue; FillExceptions (body, e); } db.Add (memberDecl, e); } return e.Values; } }