Ich habe einen Code-Block, der einige Daten aus einer gespeicherten Prozedur erhält. Nachdem ich die Daten erhalten habe, möchte ich den Wert abhängig von den Bedingungen "isExisting" zuweisen. Ich möchte "isExisting" zum Zeitpunkt der Deklaration keinen Wert zuweisen.Verwendung von nicht zugewiesenen lokalen Variablen bei Verwendung eines foreach-Schleife
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"
{
}
Ich glaube, ich bedeckt habe jede Bedingung und die Variable „isExisting“ einen Wert haben, wenn es „Schritt“ erreicht, aber noch erhalte ich Compiler-Fehler.
Das Problem begann becuase mein Code-Review-Tool ist ein Kommentar
„Ein toter Speicher geschieht werfen, wenn eine lokale Variable ein Wert zugewiesen wird, der nicht durch eine nachfolgende Anweisung gelesen wird. Die Berechnung oder einen Wert nur dann abrufen überschreiben oder wegwerfen, könnte einen schwerwiegenden Fehler im Code anzeigen. Auch wenn es kein Fehler ist, ist es bestenfalls eine Verschwendung von Ressourcen. Daher sollten alle berechneten Werte verwendet werden. "
Nicht kompatibel Codebeispiel
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++)
{
// ...
}
// ...
}
Mein Code-Review-Tool sagt, dass ich den Wert nicht deklarieren und zuweisen sollte, und der Compiler ist nicht in der Lage, herauszufinden, dass zur Laufzeit der Wert da sein wird. Also bin ich gestrandet. – Rajat
Sind Sie sicher, dass dies in Ihrem Code-Review-Tool steht? Es ist so ziemlich das Gegenteil von Best Practice ... – John3136
Stimmen Sie mit @ John3136 überein. Es empfiehlt sich, den Standardwert für jede Variable festzulegen, die Sie im Programm erstellen. –