public bool TryParse(string record, string domain, out DmarcRecord dmarcRecord) { if (string.IsNullOrEmpty(record)) { dmarcRecord = null; return(false); } string[] stringTags = record.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).ToArray(); List <Tag> tags = _tagParser.Parse(stringTags.ToList()); tags = tags.Concat(_implicitProvider.GetImplicitValues(tags)).ToList(); foreach (Tag tag in tags) { string explanation; if (_explainer.TryExplain(tag, out explanation)) { tag.Explanation = explanation; } } dmarcRecord = new DmarcRecord(record, tags, domain); dmarcRecord.AddErrors(_ruleEvaluator.Evaluate(dmarcRecord)); return(true); }