La domanda è un po' strana, ad ogni modo una cosa del genere potrebbe andare:
codice:
private Type GetTypeFromValue(string s)
{

    {bool i; if (bool.TryParse(s, out i)) return i.GetType();}
    {byte i; if (byte.TryParse(s, out i)) return i.GetType();}
    {Int16 i; if (Int16.TryParse(s, out i)) return i.GetType();}
    {Int32 i; if (Int32.TryParse(s, out i)) return i.GetType();}
    {Int64 i; if (Int64.TryParse(s, out i)) return i.GetType();}
    {Single i; if (Single.TryParse(s, out i)) return i.GetType();}
    {Double i; if (Double.TryParse(s, out i)) return i.GetType();}

    return s.GetType();
}