我有下面的扩展方法,我试图用out
属性来修饰T value
参数(T value
)。然而,它显示的错误'NotNullWhen属性是不可访问的,因为它的保护级别‘,我不知道为什么?
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;
,虽然它已经变灰了。该项目文件包含以下内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
</Project>
发布于 2020-05-03 12:46:57
如果您打开的文档,您将看到NotNullWhenAttribute
应用于:
TBH我也未能针对.NET Standard 2.1
构建库,但是您可以尝试安装nuget类似于这一个,或者自己实现这个属性(就像在运行时所做的那样),因为AFAIK编译器经常依赖于命名和/或鸭子类型。
https://stackoverflow.com/questions/61573959
复制相似问题