c# – Null Check运算符仍然返回空值
发布时间:2020-12-15 23:50:03 所属栏目:百科 来源:网络整理
导读:我正在尝试从我的依赖注入器获取实现类型的所有通用服务 protected ListServiceDescriptor GetGenericServicesFromGenericTypeDefinition(IServiceCollection services,Type baseGenericTypeDefinition){ if(false == baseGenericTypeDefinition.IsGenericTy
我正在尝试从我的依赖注入器获取实现类型的所有通用服务
protected List<ServiceDescriptor> GetGenericServicesFromGenericTypeDefinition(IServiceCollection services,Type baseGenericTypeDefinition) { if(false == baseGenericTypeDefinition.IsGenericTypeDefinition) { throw new Exception($"Invalid Argument {nameof(baseGenericTypeDefinition)}"); } //TODO: check the base type recursively var genericImplementations = services.Where(s => s?.ImplementationType.GetTypeInfo().IsGenericType ?? false) .ToList(); //.... Omitted unrelated to issue } 奇怪的是,当它试图创建genericImplementations List时,我收到一个错误
我检查了它不是null的服务,但是实现类型.这怎么可能,这有些与func如何构建有关? 编辑 解决方法
?. operator仅指它应用的解除引用操作.当不仅s可以为null,而且s.ImplementationType,表达式……
s?.ImplementationType.GetTypeInfo() ……还不够.您需要在左侧表达式为null的所有位置使用运算符: s?.ImplementationType?.GetTypeInfo() 由于GetTypeInfo()的返回不能为null,因此写入: s?.ImplementationType?.GetTypeInfo().IsGenericType ?? false 不通常应用?是一个好主意.对所有解除引用,但仅在值可以为null并且跳过表达式的其余部分时才使用它是正常的.如果您通常在所有情况下都应用运算符,则可能会出现错误,否则会很早发现错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |