Type.GenericTypeArguments 属性 vs Type.GetGenericArguments() 方

本文关键字:Type vs GenericTypeArguments 属性 GetGenericArguments | 更新日期: 2023-09-27 18:36:15

Type.GenericTypeArguments属性和Type.GetGenericArguments()方法有什么区别?它们是否总是返回相同的内容,或者是否存在不同的情况?

Type.GenericTypeArguments 属性 vs Type.GetGenericArguments() 方

typeof(List<>)

它们不同的一个例子。该属性返回一个空数组,而该方法返回一个包含泛型T的数组。(此TIsGenericParameter true

通过阅读文档,我认为您可以将GenericTypeArguments视为GetGenericArguments().Where(t => !t.IsGenericParameter).ToArray(),即仅具体类型。另请参阅ContainsGenericParameters

参考来源给出了确切的答案:

public virtual Type[] GenericTypeArguments{
    get{
        if(IsGenericType && !IsGenericTypeDefinition){
            return GetGenericArguments();
        }
        else{
            return Type.EmptyTypes;
    }
}

此实现永远不会被其他内容覆盖。