是否可以在 c# 中使用警告,或者我应该做点什么?

Is it okay warnings in c# or should I do something?

提问人:Learner 提问时间:12/11/2022 最后编辑:Vivek NunaLearner 更新时间:12/17/2022 访问量:251

问:

我的代码工作正常,但每次运行代码时,我都会收到我无法理解的警告。 我在我的 linux 终端中运行代码,它说: 将 null 文字或可能的 null 值转换为不可为 null 的类型 这正常吗?还是我应该做点什么? 这是我的代码:

namespace test2;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Choose option: \n1. +\n2. -\n3. *\n4. /");
        int num = Convert.ToInt32(Console.ReadLine());
        string ext = Console.ReadLine();
        if(num == 1){
            while(true){
                Console.WriteLine("Enter numbers or tap Q to exit:");
            int x = Convert.ToInt32(Console.ReadLine());
            int y = Convert.ToInt32(Console.ReadLine());
            int z = x + y;
            Console.WriteLine("{0}+{1}={2}", x,y,z);
            if(ext =="Q"){
                break;
            }
        }
        }
    }
}

我试图在while循环中写ext,但我不能

C# while 循环 警告 可为 null

评论

1赞 Siegfried.V 12/11/2022
我想这是因为 Console.ReadLine() 可以为 null。这里有一个链接可以解释它:stackoverflow.com/questions/38370565/...。此外,将来,请给出您收到警告的确切行,这对识别问题有很大帮助。
0赞 Siegfried.V 12/11/2022
这回答了你的问题吗?ReSharper说Console.ReadLine()返回空值

答:

1赞 Vivek Nuna 12/11/2022 #1

警告是告诉您右侧表达式可能会返回 null 值,而在您的情况下,变量的左侧不可为 null。

引用 Console.ReadLine 的声明,它返回 .string?

所以你可以声明它喜欢摆脱这个警告。 string? ext = Console.ReadLine();

1赞 Paul Albers 12/11/2022 #2

您可以定义一个默认值为 null 的变量,例如

int? num = Convert.ToInt32(Console.ReadLine());

评论

1赞 Klaus Gütter 12/11/2022
Convert.ToInt32 将始终返回一个 int,而不是一个可以为 null 的 int。
0赞 v1cc-- 12/11/2022 #3

尝试将 Convert.ToInt32 替换为 int。解析

评论

1赞 Klaus Gütter 12/11/2022
Convert.ToInt32 不是罪魁祸首,它可以优雅地处理 null 输入(返回 0)。
1赞 RezA 12/11/2022 #4

该警告与将可为 null 的类型分配给 nun-nullable 类型有关。一个简单的替代方法是使用这样的方法:int.tryparse()

int num;
int.TryParse(Console.ReadLine(),out num);
0赞 schnitzel_prog 12/16/2022 #5

这就是我所做的,以稍微修复您的代码,我将条件放在 while 循环中,而且您忘记在每次迭代后更新 ext,此外,我更改了将 int 输入转换为 int 的方法。分析而不是 Convert.ToInt32。试试这个,我相信它会按预期工作。

Console.WriteLine("Choose option: \n1. +\n2. -\n3. *\n4. /");
        int num = Convert.ToInt32(Console.ReadLine());
        if (num == 1)
        {
            string ext = Console.ReadLine();
            while (!ext.Equals("Q"))
            {
                Console.WriteLine("Enter numbers or tap Q to exit:");
                int x = int.Parse(Console.ReadLine());
                int y = int.Parse(Console.ReadLine());
                int z = x + y;
                Console.WriteLine("{0}+{1}={2}", x, y, z);
                ext = Console.ReadLine();
            }

        }