C# 不允许使用方法参数

C# 不允许使用方法参数,c#,attributes,C#,Attributes,我最近偶然发现了System.Diagnostics.codealysis名称空间和DisallowNull属性。如果我理解正确,您应该能够用它装饰一个参数,如果您试图将null传递给该参数,VisualStudio应该显示一个警告或错误 即 但我在我的项目中没有看到这种情况发生。我缺少什么?I.确保csproj中启用了可为空的contex,并且langversion为8.0或更高版本: <PropertyGroup> <TargetFramework>netstan

我最近偶然发现了
System.Diagnostics.codealysis
名称空间和
DisallowNull
属性。如果我理解正确,您应该能够用它装饰一个参数,如果您试图将null传递给该参数,VisualStudio应该显示一个警告或错误


但我在我的项目中没有看到这种情况发生。我缺少什么?

I.确保csproj中启用了可为空的contex,并且langversion为8.0或更高版本:

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

netstandard2.1
使可能
8
二、 检查代码:

三、 具体类型不需要使用
[DisallowNull]
<带有
字符串的code>[DisallowNull]
将具有与字符串
相同的警告。您可以使用更简单的字符串类型

四、 对无约束泛型类型(c#8)使用
[AllowNull]
[DisallowNull]

V.您可以使用
T?
作为无约束泛型类型的
[AllowNull]T
的替代方法(来自c#9)
请参阅:

请参阅和similar@canton7,我认为你错过了一英里的重点,我知道微软的计划,以消除空值™ 但我没有使用不可为null的上下文,我可以将null传递给该字符串。如果你再读一遍,我的问题是关于这个属性是如何工作的,因为目前它什么都没有做。你需要启用NRT,这篇文章描述了。即使这样,该属性也只适用于非常专业的上下文,大多数情况下使用
string
(而不是
string?
)是您想要的。是的,这很公平-我这样对您不好,我道歉!我在第一篇文章中没有看到任何关于属性的内容,这就是为什么我不喜欢你,但是在你的辩护中,我从来没有学会阅读。
<PropertyGroup>
  <TargetFramework>netstandard2.1</TargetFramework>
  <Nullable>enable</Nullable>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>