public static IrisDataItem FromCommaSeparatedString(string data)
            {
                var parts = data.Split(',');

                if (parts.Length != FieldsCount)
                {
                    throw new InvalidOperationException();
                }

                var result = new IrisDataItem();

                if (double.TryParse(parts[SepalLengthIndex].Replace('.', ','), out double value))
                {
                    result.SepalLength = value;
                }

                if (double.TryParse(parts[SepalWidthIndex].Replace('.', ','), out value))
                {
                    result.SepalWidth = value;
                }

                if (double.TryParse(parts[PetalLengthIndex].Replace('.', ','), out value))
                {
                    result.PetalLength = value;
                }

                if (double.TryParse(parts[PetalWidthIndex].Replace('.', ','), out value))
                {
                    result.PetalWidth = value;
                }

                result.ClassName = parts[ClassNameIndex];

                return(result);
            }
        public IrisDataReader(string fileName)
        {
            using (var input = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                using (var reader = new StreamReader(input))
                {
                    cache = new Dictionary <int, IrisDataItem>();

                    int index = 0;

                    while (!reader.EndOfStream)
                    {
                        var data = reader.ReadLine();

                        if (!string.IsNullOrWhiteSpace(data))
                        {
                            cache.Add(index++, IrisDataItem.FromCommaSeparatedString(data));
                        }
                    }
                }
        }