You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:20:34