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();
}