gpt4 book ai didi

c# - IsGenericType 和 IsGenericTypeDefinition 之间的区别

转载 作者:可可西里 更新时间:2023-11-01 07:51:45 31 4
gpt4 key购买 nike

Type.IsGenericTypeType.IsGenericTypeDefinition 有什么区别?有趣的是,MSDN 的 IsGenericTypeDefinition 链接已损坏

更新: IsGenericTypeDefinition MSDN's entry

在尝试检索给定 DbContext 中定义的所有 DbSet 后,我​​得到了以下结果,我试图理解这种行为:通过 IsGenericType 过滤属性返回所需的结果,而使用 IsGenericTypeDefinition 则不(不不返回任何)。

有趣的是,来自 this帖子我的印象是作者确实使用 IsGenericTypeDefinition 获得了他的 DbSet,而我没有。

下面是一个说明讨论的示例:

private static void Main(string[] args)
{
A a = new A();
int propertyCount = a.GetType().GetProperties().Where(p => p.PropertyType.IsGenericType).Count();
int propertyCount2 = a.GetType().GetProperties().Where(p => p.PropertyType.IsGenericTypeDefinition).Count();

Console.WriteLine("count1: {0} count2: {1}", propertyCount, propertyCount2);
}

// Output: count1: 1 count2: 0

public class A
{
public string aaa { get; set; }
public List<int> myList { get; set; }
}

最佳答案

IsGenericType告诉你 System.Type 的这个实例表示指定了所有类型参数的泛型类型。例如,List<int>是泛型。

IsGenericTypeDefinition ,另一方面,告诉您 System.Type 的这个实例表示一个定义,可以通过为其类型参数提供类型参数来构造泛型类型。例如,List<>是泛型类型定义。

您可以通过调用GetGenericTypeDefinition 来获取泛型类型的泛型定义。 :

var listInt = typeof(List<int>);
var typeDef = listInt.GetGenericTypeDefinition(); // gives typeof(List<>)

您可以通过向 MakeGenericType 提供类型参数来从泛型类型定义创建泛型类型。 :

var listDef = typeof(List<>);
var listStr = listDef.MakeGenericType(typeof(string));

关于c# - IsGenericType 和 IsGenericTypeDefinition 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772922/

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