private string Literal(Handle handle, Func <MetadataReader, Handle, string> getValue) { if (handle.IsNil) { return("nil"); } if (aggregateReader != null) { int generation; Handle generationHandle = aggregateReader.GetGenerationHandle(handle, out generation); var generationReader = readers[generation]; string value = getValue(generationReader, generationHandle); int offset = generationReader.GetHeapOffset(handle); int generationOffset = generationReader.GetHeapOffset(generationHandle); if (offset == generationOffset) { return(string.Format("{0} (#{1})", value, offset)); } else { return(string.Format("{0} (#{1}/{2})", value, offset, generationOffset)); } } if (IsDelta) { // we can't resolve the literal without aggregate reader return(string.Format("#{0}", reader.GetHeapOffset(handle))); } return(string.Format("{1} (#{0})", reader.GetHeapOffset(handle), getValue(reader, handle))); }