I'm looking for a better way to create objects based off of a value of a string. Consider the following:Input file://each Vehicle type has a list of different options//whose length varies, I provided a simple casevan*2006*dodge*grand caravan*green~car*2010*toyota*corolla*red~truck*2005*toyota*tundra*black~Classes:abstract class Vehicle: IVehicle{    public int Year;    public string Make;    public string Model;    ...}class Van : Vehicle{    ...}class Car : Vehicle{    ...}class Truck : Vehicle{    ...}Program:static void Main(string[] args){    char delimiter = '*';    string fileToRead = inventory.csv;    string currentLine = string.Empty;    List<IVehicle> inventory = new List<IVehicle>();    //Open file    using (StreamReader reader = new StreamReader(fileToRead))    {        //while you read each line        while ((currentLine = reader.ReadLine()) != null)        {            IVehicle temp;            //Tokenize the line             string[] parts = currentLine.Split(delimiter);            switch(parts[0])            {                case van:                    temp = new Van();                    ...                break;                case car                    temp = new Car();                    ...                break;                case truck                    temp = new Truck();                    ...                break;            }            inventory.add(temp);        }    }    ...}My problem with the code is the switch statement. It feels messy and I'm looking for a better way.
Better way to create objects from strings
c#
In .Net laguages you can easily instatiate any object given only the full name of the class (=namespace+class name).Here is a runnable example:using System;using System.Reflection;namespace Test{    class MsgPrinter    {        public MsgPrinter()        {            System.Console.WriteLine(Hello!);        }    }    class Program    {        static void Main(string[] args)        {            Assembly assembly = Assembly.GetExecutingAssembly();            MsgPrinter printer = assembly.CreateInstance(Test.MsgPrinter) as MsgPrinter;            Console.Read();        }    }}So in your case it would break down to something like (of course, the names in your parameter file would need to exactly match the class names in your application):...string[] parts = currentLine.Split(delimiter);Vehicle vehicle = Assembly.GetExecutingAssembly().CreateInstance(namespace_name+.+parts[0]) as Vehicle;...