我有以下扩展方法,我正在尝试用属性装饰out参数 ( T value) NotNullWhen。但是,它显示错误“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;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将类访问修饰符更改为public无效。我还nullable为类库启用了C# 8上下文。
知道如何解决这个问题吗?
编辑:
我只是尝试使用上面的扩展类创建一个新的类库。现在它显示“找不到命名空间名称'NotNullWhen'的类型(您是否缺少 using 指令或程序集引用)”。我已经包括了using System.Diagnostics.CodeAnalysis;哪个是灰色的。项目文件包含以下内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
如果您打开文档,您将看到它NotNullWhenAttribute适用于:
TBH 我也没有针对它构建 lib .NET Standard 2.1,但是您尝试可以像这样安装 nuget或自己实现这个属性(就像在运行时完成的那样),因为 AFAIK 编译器经常依赖于命名和/或鸭子类型。
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |