C#对象变量声明及未赋值局部变量CS0165报错求助
解决CS0165未赋值局部变量错误
错误原因
C#编译器会做静态代码路径检查:当局部变量info存在未赋值就被调用的可能路径时(比如用户输入的n=0,循环一次都不执行,info始终处于未初始化状态),就会抛出Error CS0165 Use of unassigned local variable 'info'错误。
另外,最初用var info;报错是因为C#的var关键字必须在声明时同时赋值,编译器需要通过赋值语句推断变量类型,单独声明var info;不符合语法规则。
解决方法
针对这个场景,有两种常见处理方式:
方式1:初始化默认值+空引用判断
声明info时先赋值为null,在调用ToString()前检查变量是否为空,避免空引用异常:
Employee info = null; int n = int.Parse(Console.ReadLine()); for (int a = 0; a < n; a++) { string input = Console.ReadLine(); List<string> inputs = input.Split(" ").ToList(); info = new Employee(inputs[0], double.Parse(inputs[1]), inputs[2], inputs[3], inputs[4], int.Parse(inputs[5])); } if (info != null) { Console.WriteLine(info.ToString()); } else { Console.WriteLine("未输入任何员工信息"); }
方式2:使用空合并运算符简化判断
用?.(空条件运算符)和??(空合并运算符)简化空值判断逻辑:
Employee info = null; int n = int.Parse(Console.ReadLine()); for (int a = 0; a < n; a++) { string input = Console.ReadLine(); List<string> inputs = input.Split(" ").ToList(); info = new Employee(inputs[0], double.Parse(inputs[1]), inputs[2], inputs[3], inputs[4], int.Parse(inputs[5])); } Console.WriteLine(info?.ToString() ?? "无有效员工信息");
补充说明
如果业务逻辑能保证n必然大于0(比如提前做了输入校验),也可以直接在声明时初始化一个临时Employee实例,但仍建议保留空值判断,避免意外情况导致的异常。
内容的提问来源于stack exchange,提问作者Martin Slavchev
相关产品推荐
相关产品推荐

