我有一个给定的类型:
Type modelType = context.ModelType;
如何创建该类型的枚举?
我能做的最好的事情就是创建一个对象枚举并使用它:
IEnumerable<Object> numbers = Enumerable.Empty<Object>();
所以我需要的是这样的东西(不起作用的代码):
// Doesn't compile, since modelType is a variable and not the actual type
IEnumerable<Object> numbers = Enumerable.Empty<modelType>();
答案 0 :(得分:1)
您可以使用Activator Class创建类型的实例。然后,您只需要提供正确的类型信息即可。
然后,您可以将实例转换为适用于所提供的每个javax.persistence.EntityManager.persist(entity)
的任何类型。
modelType
您也可以为此创建一个静态方法。
var modelType = typeof(Int32); // Or whatever type you enter
var listOfModelType = typeof(List<>).MakeGenericType(modelType);
var instance = Activator.CreateInstance(listOfModelType);
var isListInt = instance is List<Int32>; // Will evaluate to true
这样称呼:
public static object GetEmptyEnumerableOfType(this Type type)
{
var listOfModelType = typeof(List<>).MakeGenericType(type);
var instance = Activator.CreateInstance(listOfModelType);
return instance;
}
唯一的问题是,您不能将其转换为 var modelType = typeof(Int32);
var emptyList = modelType.GetEmptyEnumerableOfType();
,因为在这种情况下它是IEnumerable<object>
。如果可以确保仅调用从struct
派生的类型,则可以创建以下重载:
class
但是如果使用struct调用,它将引发异常。