创建给定类型的空枚举

时间:2019-05-20 12:24:46

标签: c#

我有一个给定的类型:

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>(); 

1 个答案:

答案 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调用,它将引发异常。