public static void Check(ITag tag) { IDictionary <PropertyInfo, RequiredAttribute> requiredProperties = GetRequiredProperties(tag); List <string> missingProperties = CollectMissingProperties(requiredProperties, tag); if (missingProperties.Count > 0) { throw TagException.MissingRequiredAttribute(tag.GetType(), missingProperties.ToArray()).Decorate( tag.Context); } }