У меня есть следующий метод расширения, и я пытаюсь украсить параметр 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;
}
}
Я пытался изменить модификатор доступа к классу на public
безрезультатно. У меня также включен контекст C# 8 nullable
для библиотеки классов.
Есть идеи, как решить эту проблему?
Редактировать:
Я только что попытался создать новую библиотеку классов только с классом расширений выше. Теперь он отображает «Тип имени пространства имен« 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>