private static AssertionTracker As <TSubject>(
            [ValidatedNotNull] this TSubject value,
            string name,
            AssertionKind assertionKind)
        {
            if (value is AssertionTracker tracker)
            {
                tracker.ThrowImproperUseOfFrameworkIfDetected(AssertionTrackerShould.NotExist);
            }

            var result = value.BuildTrackerFromAnonymousObject(name, assertionKind) ?? new AssertionTracker
            {
                SubjectValue  = value,
                SubjectName   = name,
                SubjectType   = typeof(TSubject),
                Actions       = Actions.Categorized,
                AssertionKind = assertionKind,
            };

            if (name != null)
            {
                result.Actions |= Actions.Named;
            }

            return(result);
        }
        private static AssertionTracker BuildTrackerFromAnonymousObject <TSubject>(
            [ValidatedNotNull] this TSubject value,
            string name = null,
            AssertionKind assertionKind = AssertionKind.Unknown)
        {
            var subjectType = typeof(TSubject);

            AssertionTracker result = null;

            if (!ReferenceEquals(value, null))
            {
                if (subjectType.IsClosedAnonymousTypeFastCheck())
                {
                    // with one property?  that's the subject we are trying to apply verification to.
                    var properties = subjectType.GetProperties();
                    if (properties.Length == 1)
                    {
                        result = new AssertionTracker
                        {
                            SubjectValue  = properties[0].GetValue(value, null),
                            SubjectName   = name ?? properties[0].Name,
                            SubjectType   = properties[0].PropertyType,
                            AssertionKind = assertionKind,
                        };

                        if (assertionKind != AssertionKind.Unknown)
                        {
                            result.Actions |= Actions.Categorized;
                        }

                        if (result.SubjectName != null)
                        {
                            result.Actions |= Actions.Named;
                        }
                    }
                    else
                    {
                        var errorMessage = string.Format(CultureInfo.InvariantCulture, Verifications.AnonymousObjectDoesNotHaveSinglePropertyErrorMessage, properties.Length, string.Join(", ", properties.Select(_ => _.Name).ToArray()));

                        ThrowImproperUseOfFramework(errorMessage);
                    }
                }
            }

            return(result);
        }