First we need to convert p.Value
to the right type, since even if we know the type at compile time we can't pass the string straight to the method...
DoSomething<Int32>( "10" ); // Build error
For simple numeric types and DateTime, we can use
object convertedValue = Convert.ChangeType(p.Value, p.DisplayType);
Now we can use reflection to invoke the required generic method...
typeof(ClassExample)
.GetMethod("DoSomething")
.MakeGenericMethod(p.DisplayType)
.Invoke(this, new object[] { p.Name, convertedValue });