我正在学习 C 锐利的竞争性编码。我得到了没有错误但警告的解决方案。这是一张截图

I am learning C sharp though competitive coding. I've got the solution with no errors but a warning. Here's a screenshot

提问人:Chakanshu 提问时间:1/24/2023 最后编辑:burnsiChakanshu 更新时间:1/25/2023 访问量:72

问:

enter image description here

int num = Convert.ToInt32(Console.ReadLine());
string name = System.Console.ReadLine();

Console.WriteLine(2 * num);
Console.WriteLine(name);

严重性代码说明 项目文件行抑制状态 警告 CS8600 将 null 文本或可能的 null 值转换为不可为 null 的类型。

我什么都没试过

C# 警告

评论

1赞 Crowcoder 1/24/2023
您可以随时查找错误代码并了解它是什么以及修复它的可能方法。

答:

0赞 Aether 1/25/2023 #1

在 C# 中,可以通过添加 ?在类型之后,对于类(字符串是类),这意味着 null 是变量的预期/可接受值。类本质上只是指向存储在堆上的值的指针,null 是一种表示指向任何内容的指针的方法,通常用于指示某种错误。类类型的变量可以为 null,但这可能是意外的,因此我们有可为 null 的类来表明 null 是对象的有效状态。

例:

字符串名称 = “text”;

字符串?nullableName = 空;

如果我们删除了 ?在字符串之后,编译器会抱怨我们试图将一个预期为 null 的值分配给一个不应该为 null 的值。查看 Console.ReadLine() 方法,我们可以看到它返回一个字符串?因此可以是 null,但变量名称只是一个字符串而不是一个字符串?。编译器知道您需要字符串值,如果结果为 null,则会引发错误,但会警告您可能会引发意外异常。

解决 方案:

您可以使用 null 宽恕运算符显式告诉编译器该值将/不应该为 null!方法调用后

Console.ReadLine()!

将 name 声明为可为 null 的字符串 (string?而不是字符串),然后检查值是否为 null,请注意,接受字符串的方法在传递名称时会抱怨,因为它可能是 null

if (name == null)
{
    //do something in case of failure
}

如果您不熟悉 C# 或一般编程,只需在 Internet 上查找错误,通常就可以在处理编译时错误/警告时给出您正在寻找的答案。如果您搜索错误代码 (CS8600),您将正确看到 Microsoft 文档的结果,它们可能有点难以理解,因此请尝试搜索错误/警告消息,在这种情况下,如果您想了解有关 C# 中可为 null 性的更多信息,我推荐这篇文章Converting null literal or possible null value to non-nullable type.