首页 > 解决方案 > 在 C# 中将 null 分配给整数

问题描述

我有一个 winforms 应用程序,我试图在 tableadapter 中传递 5 个参数以执行查询,但我收到错误“无法从 'int 转换?” 到'int'。它们都可以是空值。

private int? c_id ;
private string c_cn;
private int? c_afm;
private string c_job;
private string c_city;

private void btnView_Click(object sender, EventArgs e) {
c_id = (txtBox_id.Text != string.Empty) ? c_id = Convert.ToInt32(txtBox_id.Text) : c_id = null;
c_afm = (txtBox_afm.Text != string.Empty) ? c_afm = Convert.ToInt32(txtBox_afm.Text) : c_afm = null;
c_cn = (txtBox_cn.Text != string.Empty) ? c_cn = txtBox_cn.Text : c_cn = null;
c_job = (txtBox_job.Text != string.Empty) ? c_job = txtBox_job.Text : c_job = null;
c_city = (txtBox_job.Text != string.Empty) ? c_city = txtBox_city.Text : c_city = null;

this.clientBrowserTableAdapter.Fill(erpDataSet.PelatesBrowser,c_id,c_cn,c_afm, c_job,c_city);
}

问题出在 c_id 和 c_afm 参数上。有任何想法吗?

标签: c#.netwinforms

解决方案


您可以创建一个专用的方法来将字符串转换为int?

private int? ConvertToDbInt(string text)
{
    if (string.IsNullOrEmpty(text))
    {
        return null;
    }

    return int.Parse(text);
}

然后将其重用于不同的变量

c_id = ConvertToDbInt(txtBox_id.Text);
c_afm = ConvertToDbInt(txtBox_afm.Text);

您的实际问题是因为条件运算符?:期望正数和负数表达式都产生相同类型的值,在您的情况下是int- 正数和int?负数。

first_expression 和 second_expression 的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

如果您是条件运算符的忠实粉丝,?:那么在您的情况下,只需确保两个表达式都返回相同的类型int?

c_id = (txtBox_id.Text != string.Empty) ? (int?)Convert.ToInt32(txtBox_id.Text) : null;

当在线抛出异常时this.clientBrowserTableAdapter.Fill(...,这意味着该Fill方法需要类型参数int,您可以通过调用轻松地将可为空的 int 转换为 int 。.GetValueOrDefault()

this.clientBrowserTableAdapter.Fill(
    erpDataSet.PelatesBrowser,
    c_id.GetValueOrDefault(),
    c_cn,
    c_afm.GetValueOrDefault(), 
    c_job,
    c_city);

推荐阅读