Why is it required to have the (object) in the cast? It seems kind of counter-intuitive.
public void GenerateForm<T>(T form)
{
if (form.GetType() == typeof(Form1))
{
Console.WriteLine(((Form1)(object)form).name);
}
}