public static List <T> ParseStringArray <T>(string[] lines) where T : new()
        {
            if (lines == null)
            {
                throw new ArgumentNullException(nameof(lines));
            }

            var list            = new List <T>();
            var props           = typeof(T).GetFixedWidthAttributedProperties();
            var propertyInfos   = props as PropertyInfo[] ?? props.ToArray();
            var minStringLength = Utils.CheckMinStringWidth(propertyInfos);

            foreach (var line in lines)
            {
                // Check if the string has the minimal required length
                if (line.Length < minStringLength)
                {
                    // if it is too short skip this line because we can not
                    // successfully parse the line
                    continue;
                }

                var e = new T();
                foreach (var propertyInfo in propertyInfos)
                {
                    var attribute = propertyInfo.GetFixedWidthAttribute();

                    var toConvert = line.Substring(attribute.From, attribute.Length);

                    // choose the converter to convert
                    var converter = Utils.CreateConverterFromType(attribute.Converter)
                                    ?? ConverterMap.GetForType(propertyInfo.PropertyType);

                    propertyInfo.SetValue(e, Utils.ConvertWithConverter(converter, toConvert));
                }
                list.Add(e);
            }
            return(list);
        }