首页 > 解决方案 > 如何避免使用永远不会发生的未分配变量?

问题描述

在下面的代码中,编译器在返回行的“intValue”上给出了“使用未分配的局部变量”。但是,不会出现“intValue > 500”将被取消分配的情况(因为如果intValue未分配,valueIsInt则为 false,并且该语句在达到之前返回 false intValue

有没有办法在不修改代码逻辑业务逻辑的情况下解决这个问题?这是一个非常简化的例子;在intValue另一种类型且条件intValue > 500更复杂的情况下,我们不能简单地在else块中给 intValue 一个值,例如intValue = 0

bool valueIsInt;

if (value is int intValue)
{
    valueIsInt = true;
}
else
{
    valueIsInt = false;
}

return valueIsInt && intValue > 500;

我想避免这种情况,以防 else 语句中的代码更复杂:

else
{
    return false;
}

比如这样:

bool valueIsInt;

if (value is int intValue)
{
    valueIsInt = true;
}
else
{
    if (value is string stringValue)
        valueIsInt = int.TryParse(stringValue, out intValue);
    else
        return false;
}

return valueIsInt && intValue > 500;

标签: c#unassigned-variable

解决方案


更新

static bool IsValueGreaterThan500(object value)
{
    try
    {
        // Converts the value to int if it is not already an int
        // from bool, short, float, double, string, etc.
        return Convert.ToInt32(value) > 500;
    }
    catch
    {
        return false;
    }
}

推荐阅读