# Reading Multiple Record Types

If you have CSV data where each row may be a different record type, you should be able to read based on a row type or something similar.

###### Data

    A,1,foo
    B,07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,bar

###### Example

    void Main()
    {
    	var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    	{
    		HasHeaderRecord = false,
    	};
        using (var reader = new StreamReader("path\\to\\file.csv"))
        using (var csv = new CsvReader(reader, config))
        {
    		csv.Context.RegisterClassMap<FooMap>();
    		csv.Context.RegisterClassMap<BarMap>();
    		var fooRecords = new List<Foo>();
    		var barRecords = new List<Bar>();
    		while (csv.Read())
    		{
    			switch (csv.GetField(0))
    			{
    				case "A":
    					fooRecords.Add(csv.GetRecord<Foo>());
    					break;
    				case "B":
    					barRecords.Add(csv.GetRecord<Bar>());
    					break;
    				default:
    					throw new InvalidOperationException("Unknown record type.");
    			}
    		}
        }
    }

    public class Foo
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class Bar
    {
    	public Guid Id { get; set; }
    	public string Name { get; set; }
    }

    public sealed class FooMap : ClassMap<Foo>
    {
    	public FooMap()
    	{
    		Map(m => m.Id).Index(1);
    		Map(m => m.Name).Index(2);
    	}
    }

    public sealed class BarMap : ClassMap<Bar>
    {
    	public BarMap()
    	{
    		Map(m => m.Id).Index(1);
    		Map(m => m.Name).Index(2);
    	}
    }