首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决“NotNullWhen属性由于其保护级别而无法访问”错误

如何解决“NotNullWhen属性由于其保护级别而无法访问”错误
EN

Stack Overflow用户
提问于 2020-05-03 11:50:53
回答 1查看 2.6K关注 0票数 4

我有下面的扩展方法,我试图用out属性来修饰T value参数(T value)。然而,它显示的错误'NotNullWhen属性是不可访问的,因为它的保护级别‘,我不知道为什么?

代码语言:javascript
运行
复制
    using System;
    using System.Collections.Generic;
    using System.Diagnostics.CodeAnalysis;

    internal static class Extensions
    {
        public static bool TryGetValueForAssignableType<T>(this IDictionary<Type, T> dictionary, Type key, [NotNullWhen(true)] out T value)
        {
            value = default;

            foreach (var pair in dictionary)
            {
                if (pair.Key.IsAssignableFrom(key))
                {
                    value = pair.Value;
                    return true;
                }
            }

            return false;
        }
    }

我尝试将类访问修饰符更改为public,但没有任何效果。我还为类库启用了C# 8 nullable上下文。

知道怎么解决这个问题吗?

编辑:

我刚刚尝试用上面的扩展类创建一个新类库。现在,它显示“无法找到名称空间名称'NotNullWhen‘的类型(您是缺少了使用指令还是程序集引用)。我已经包括了using System.Diagnostics.CodeAnalysis;,虽然它已经变灰了。该项目文件包含以下内容:

代码语言:javascript
运行
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <Nullable>enable</Nullable>
    <LangVersion>8.0</LangVersion>
  </PropertyGroup>

</Project>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-03 12:46:57

如果您打开的文档,您将看到NotNullWhenAttribute应用于:

  • .NET 5.0,6.0预览6
  • .NET核心3.13.0
  • .NET标准2.1

TBH我也未能针对.NET Standard 2.1构建库,但是您可以尝试安装nuget类似于这一个,或者自己实现这个属性(就像在运行时所做的那样),因为AFAIK编译器经常依赖于命名和/或鸭子类型。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61573959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档