gpt4 book ai didi

c# - 如何将可为空的对象引用分配给不可为空的变量?

转载 作者:行者123 更新时间:2023-12-03 23:11:56 25 4
gpt4 key购买 nike

我正在使用 VS2019 并在项目设置中启用了可为空检查语义。我正在尝试使用程序集获取可执行文件的路径,如下所示:

        var assembly = Assembly.GetEntryAssembly();
if (assembly == null)
{
throw new Exception("cannot find exe assembly");
}
var location = new Uri(assembly.GetName().CodeBase);//doesn't compile.

它说,“assembly”是一个 [Assembly?] 类型,而 Uri ctor 需要一个字符串,编译错误是:
error CS8602: Dereference of a possibly null reference.

如何修复我的代码以使其编译?
非常感谢。

最佳答案

你的问题是 AssemblyName.CodeBase 可以为空:它的类型是 string? .

您需要添加额外的代码来处理 .CodeBase 的情况。是 null (或用 ! 抑制它),例如:

var codeBase = Assembly.GetEntryAssembly()?.GetName().CodeBase;
if (codeBase == null)
{
throw new Exception("cannot find exe code base");
}
var location = new Uri(codeBase);

或者
var location = new Uri(assembly.GetName().CodeBase!);

在这种情况下您得到的实际警告与 assembly 无关。 , 它的:

warning CS8604: Possible null reference argument for parameter 'uriString' in 'Uri.Uri(string uriString)'.



Source (展开右下角的“警告” Pane )。这告诉您问题在于传递到 Uri 的字符串。构造函数,即从 .CodeBase 返回的字符串.

关于c# - 如何将可为空的对象引用分配给不可为空的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60564690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com