- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个控制台应用程序来试用 C# 8 空引用类型。将项目切换为使用语言版本 C# 8 构建。
然后以下代码会导致警告。
class Program
{
static void Main(string[] args)
{
string? message = "Hello World";
string message2 = null;
Console.WriteLine(message);
Console.WriteLine(message2);
// The annotation for nullable reference types should only be used in code within a '#nullable' context
}
}
这到底是什么意思?
最佳答案
致所有来到这里的人。你可以把#nullable enable
按照@Marc 在评论中的建议,在文件之上进行逐个文件的方法。
您还可以使用#nullable enable/disable 的组合来注释文件的一部分
class Program
{
static void Main(string[] args)
{
#nullable enable
string? message = "Hello World";
#nullable disable
string message2 = null;
Console.WriteLine(message);
Console.WriteLine(message2);
}
}
这是文档的链接。 https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references#nullable-contexts
Nullable contexts enable fine-grained control for how the compiler interprets reference type variables. The nullable annotation context of any given source line is either enabled or disabled. You can think of the pre-C# 8.0 compiler as compiling all your code in a disabled nullable context: any reference type may be null. The nullable warnings context may also be enabled or disabled. The nullable warnings context specifies the warnings generated by the compiler using its flow analysis.
The nullable annotation context and nullable warning context can be set for a project using the Nullable element in your
.csproj
file. This element configures how the compiler interprets the nullability of types and what warnings are generated. Valid settings are:
enable
:
- The nullable annotation context is enabled. The nullable warning context is enabled.
- Variables of a reference type,
string
for example, are non-nullable. All nullability warnings are enabled.warnings
:
- The nullable annotation context is disabled. The nullable warning context is enabled.
- Variables of a reference type are oblivious. All nullability warnings are enabled.
annotations
:
- The nullable annotation context is enabled. The nullable warning context is disabled.
- Variables of a reference type,
string
for example, are non-nullable. All nullability warnings are disabled.disable
:
- The nullable annotation context is disabled. The nullable warning context is disabled.
- Variables of a reference type are oblivious, just like earlier versions of C#. All nullability warnings are disabled.
在你的.csproj
文件,只需添加 <Nullable>enable</Nullable>
在相关<PropertyGroup>
元素(您的项目文件可能有单独的 <PropertyGroup>
元素用于每个项目配置名称)。
所以你的项目文件应该是这样的:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
要将可为 null 的消息显示为错误而不是警告,请将其添加到您的项目文件中:
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
...像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
</PropertyGroup>
</Project>
对应的完整消息是:
You can also use directives to set these same contexts anywhere in your project:
#nullable enable
: Sets the nullable annotation context and nullable warning context to enabled.#nullable disable
: Sets the nullable annotation context and nullable warning context to disabled.#nullable restore
: Restores the nullable annotation context and nullable warning context to the project settings.#nullable disable warnings
: Set the nullable warning context to disabled.#nullable enable warnings
: Set the nullable warning context to enabled.#nullable restore warnings
: Restores the nullable warning context to the project settings.#nullable disable annotations
: Set the nullable annotation context to disabled.#nullable enable annotations
: Set the nullable annotation context to enabled.#nullable restore annotations
: Restores the annotation warning context to the project settings.By default, nullable annotation and warning contexts are disabled. That means that your existing code compiles without changes and without generating any new warnings.
请注意,C# 8.0 和 Visual Studio 2019 的预发布版本也支持 safeonly
, 然而this option has since been removed并且不存在于最终发布的 C# 8.0 中。此外,预发布版本使用了 #pragma warning restore nullable
但发布的版本使用 #nullable restore warnings
.
关于c# - 可为 null 的引用类型的注释只能在 '#nullable' 上下文中的代码中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55492214/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!