At run-time, I don\'t know what type of variable v1 is.
For this reason, I wrote many if else statements:
if (v1 is ShellProperty
For generics, you have to create them dynamically.
MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);
To create a generic object, you can
var type = typeof(ShellProperty<>).MakeGenericType(typeof(SomeObject));
var v2 = Activator.CreateInstance(type);
Please refer to Initializing a Generic variable from a C# Type Variable