public static Type MakeGenericType(Type genericTypeDefinition, params Type[] innerTypes) {
genericTypeDefinition.ShouldNotBeNull("genericTypeDefinition");
innerTypes.ShouldNotBeEmpty("innerTypes");
Guard.Assert(() => genericTypeDefinition.IsGenericTypeDefinition, @"Type [{0}] is not a generic type definition.",
genericTypeDefinition);
return genericTypeDefinition.MakeGenericType(innerTypes);
}