gpt4 book ai didi

c# - 创建给定类型的空枚举

转载 作者:行者123 更新时间:2023-11-30 17:26:36 24 4
gpt4 key购买 nike

我有一个给定的类型:

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

最佳答案

您可以使用 Activator Class 创建类型实例.然后您只需要提供正确的类型信息。

然后您可以将实例转换为适合每个 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 的类型您可以创建以下重载:

    public static IEnumerable<object> GetEmptyEnumerableOfClass(this Type type)
{
return (IEnumerable<object>) type.GetEmptyEnumerableOfType();
}

但是如果用结构调用它会抛出异常。

关于c# - 创建给定类型的空枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56220976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com