GetTypeInfo可以返回null吗?

时间:2017-08-30 08:18:34

标签: c# .net .net-standard

我正在重写一些使用反射来编译.NET Standard 1.4的代码(目标是.NET 4.5.2。)。因此,我需要在许多地方对Type使用GetTypeInfo()。

为了正确处理边缘情况,我的问题是,GetTypeInfo()是否可以返回null?文档(https://msdn.microsoft.com/en-us/library/system.reflection.introspectionextensions.gettypeinfo(v=vs.110).aspx)对此保持沉默。

当我从标准.NET 4.5.2项目中打开GetTypeInfo()源时,我得到:

public static class IntrospectionExtensions
{
    public static TypeInfo GetTypeInfo(this Type type){
        if(type == null){
            throw new ArgumentNullException("type");
        }
        var rcType=(IReflectableType)type;
        if(rcType==null){
            return null;
        }else{
            return rcType.GetTypeInfo();
        }
    }   
}

这仍然令人困惑。有一个代码分支,当'(IReflectableType)类型'是空的,但为什么呢? - '类型'本身是在之前检查为null,并且当它为null时抛出异常,因此我无法看到' rcType'永远不会为空(请注意,这不是'作为'运算符,它是直接的类型转换)。

在一个好传统中,IReflectableType.GetTypeInfo(,https://msdn.microsoft.com/en-us/library/system.reflection.ireflectabletype.gettypeinfo(v=vs.110).aspx)上的文档也没有提到空结果的可能性。

使用反射的代码需要在许多地方使用GetTypeInfo,如果允许null结果,则需要在每个这样的位置进行空检查和相应的操作。我检查了其他人的代码(包括微软自己在https://msdn.microsoft.com/en-us/library/system.reflection.typeinfo%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396的例子),开发人员似乎将其视为空结果是不可能的。这是对的吗?

1 个答案:

答案 0 :(得分:3)

GetTypeInfo()永远不会返回null。

请参阅.NET Core中的new code以及移植此代码的Microsoft人员留下的评论。