public static Type ToSubFeatureType(this SubFeature subFeatureEnumMember)
        {
            switch (subFeatureEnumMember)
            {
            case SubFeature.ThroughHole:
                return(typeof(ThroughHoleSubFeature));

            case SubFeature.RetainingRingGroove:
                return(typeof(RetainingRingGrooveSubFeature));

            case SubFeature.RetainingRingBore:
                return(typeof(RetainingRingGrooveSubFeature));

            case SubFeature.KeywayGroove:
                return(typeof(KeywayGrooveSubFeature));

            case SubFeature.Wrench:
                return(typeof(WrenchSubFeature));

            case SubFeature.ReliefDSI:
                return(typeof(ReliefDSISubFeature));

            case SubFeature.GrooveA:
                return(typeof(GrooveASubFeature));

            case SubFeature.GrooveB:
                return(typeof(GrooveBSubFeature));

            default:
                throw new ArgumentException($"Cannot find a corresponding sub feature for {subFeatureEnumMember}",
                                            nameof(subFeatureEnumMember));
            }
        }