我正在创建一个小程序,其中radiobutton的值将被添加到数据库中(性别:男性和女性。)但它有一个错误说"使用未分配的局部变量"关于"性别"必须插入数据库。任何帮助将不胜感激。
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
Connection();
sql_connect.Open();
try
{
string gender;
if (radioButton_Female.Checked)
{
gender = "Female";
}
if (radioButton_Male.Checked)
{
gender = "Male";
}
sql_command = new MySqlCommand("insert into tbl_sample (gender) values ('" + gender + "')", sql_connect); //here
sql_command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
sql_connect.Close();
MessageBox.Show("Added!");
}
答案 0 :(得分:1)
如果您的条件都没有通过,则必须为gender
提供默认值。虽然在您的应用程序中可能不会发生这种情况,但编译器并不够聪明,无法知道。所以写下这个:
string gender = string.Empty;
另外用if
替换第二个else
语句:
if (radioButton_Female.Checked)
{
gender = "Female";
}
else
{
gender = "Male";
}
甚至更短时间使用ternary operator:
string gender = radioButton_Female.Checked ? "Female" : "Male"
因此gender
始终被初始化。
答案 1 :(得分:1)
如果您的两个单选按钮未已选中,该怎么办?在这种情况下gender
会是什么?
编译器无法知道这一点。它永远不会确保gender
实际已初始化。这就是为什么你需要在使用它之前初始化你的局部变量。编译器给出了这个错误,因为它试图防止出错。
作为Eric Lippert said;
使用未分配的局部变量可能是一个错误,这可能是 编译器以低成本检测到。
将其指定为;
string gender = "";
还有一些事情;
using
statement处理您的连接和命令。答案 2 :(得分:1)
如果您执行代码,则可能无法分配字符串性别。如果未检查radioButton_Male和radioButton_Female。这在UI的逻辑中可能是不可能的,但从编译器的角度来看也是如此。
您可以将性别字符串初始化为string.Empty。或者最好你可以改变逻辑以使用if else结构。例如:
string gender = string.Empty;
if (radioButton_Female.Checked)
{
gender = "Female";
}else if (radioButton_Male.Checked)
{
gender = "Male";
}else
{
throw new Exception("Error msg");
}