我有一个从存储过程中获取一些数据的代码块。收到数据后,我想根据条件将值分配给“isExisting”。我不想在声明时为“isExisting”赋值。
bool isExisting;
using (var conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("some_stored_procedure", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("input", value));
using (var adapter = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
adapter.Fill(ds);
if (ds.Tables.Count > 0)
{
if (ds.Tables[0].Rows.Count == 0)
isExisting = false;
else
{
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["Key"].ToString() == ValueToCompareWith)
{
isExisting = true;
break;
}
else
isExisting = false;
}
}
}
else
isExisting = false;
}
}
}
if (!isExisting) //Step :getting error "use of unassigned local variable"
{
}
我想我已经涵盖了所有条件,并且变量“isExisting”在达到“Step”时会有一个值,但我仍然得到编译器错误。
问题开始是因为我的代码审查工具正在抛出评论
“当为局部变量分配了任何后续指令都不会读取的值时,就会发生死存储。计算或检索一个值只是为了覆盖它或将其丢弃,这可能表明代码中存在严重错误。即使它不是一个错误,充其量是浪费资源。因此应该使用所有计算值。
不合规代码示例
void CalculateRate(int a, int b)
{
int i;
i = a + b; // Noncompliant; calculation result not used before value is overwritten
i = DoSomething(); // Noncompliant; retrieved value not used
for (i = 0; i < 10; i++)
{
// ...
}
// ...
}