“使用未分配的局部变量”错误的原因是啥? [复制]

Posted

技术标签:

【中文标题】“使用未分配的局部变量”错误的原因是啥? [复制]【英文标题】:What is the reason for "Use of unassigned local variable" error? [duplicate]“使用未分配的局部变量”错误的原因是什么? [复制] 【发布时间】:2016-03-25 12:16:36 【问题描述】:

使用此代码:

bool dataToAdd;
if (null == _priceComplianceDetailList) return dataToAdd;

我收到一个编译器错误,“使用未分配的局部变量 'dataToAdd'

所以我必须明确地将“false”分配给 bool:

bool dataToAdd = false;
if (null == _priceComplianceDetailList) return dataToAdd;

在上下文中:

private bool PopulateSheetWithDetailData()

    bool dataToAdd = false;
    if (null == _priceComplianceDetailList) return dataToAdd;
    List<PriceComplianceDetail> _sortedDetailList =
    . . .
    return _sortedDetailList.Count > 0;

为什么有必要? bool 的默认值不是 false 吗?

【问题讨论】:

默认只适用于类成员,方法中的局部变量必须显式赋值。 您也可以完全删除变量,因为您是根据列表的计数返回的,并且在第一个 if 块中您可以直接返回 false。 【参考方案1】:

因为默认情况下不初始化局部变量。您应该明确地初始化它们。这是一个编译器功能,可以避免将来出现错误。在语言规范here 和here 中对此进行了说明。

这是在 C# 中非法的原因是因为使用未分配的本地 很有可能是一个错误

如果您想知道此决定的原因,请参阅here。

【讨论】:

同样相关的是section 5.1.7。具体来说:“由 local-variable-declaration 引入的局部变量不会自动初始化,因此没有默认值。” 添加到答案中,谢谢@JoeFarrell,

以上是关于“使用未分配的局部变量”错误的原因是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

统一使用未分配的局部变量(CS0165)光线投射[重复]

使用空分配修复“使用未分配的局部变量”。为啥?

为啥这个 (null || !TryParse) 条件会导致“使用未分配的局部变量”?

分配变量后的线性搜索

我出现内存不足错误,如何解决?Permgen 空间区域是啥意思?是啥原因造成的? [复制]

使用 SQL DataReader 中的变量 [重复]