public override ComparisonKey Cache(ValueCache valueCache) { var comparisonKey = this; if (valueCache.TryGetCachedValue(ref comparisonKey)) { return(comparisonKey); } ImmutableList <string> modificationNames = ModificationNames; if (ModificationNames != null) { if (!valueCache.TryGetCachedValue(ref modificationNames)) { modificationNames = ImmutableList.ValueOf(modificationNames.Select(valueCache.CacheValue)); modificationNames = valueCache.CacheValue(modificationNames); } } comparisonKey = new Peptide(LibraryKey.ValueFromCache(valueCache)) { ModificationIndexes = valueCache.CacheValue(ModificationIndexes), ModificationNames = modificationNames }; return(valueCache.CacheValue(comparisonKey)); }