首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中将null赋值为整数

在C#中将null赋值为整数
EN

Stack Overflow用户
提问于 2018-08-19 06:20:06
回答 2查看 5.4K关注 0票数 0

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

代码语言:javascript
复制
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参数。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-19 07:01:21

可以创建将字符串转换为int?的专用方法。

代码语言:javascript
复制
private int? ConvertToDbInt(string text)
{
    if (string.IsNullOrEmpty(text))
    {
        return null;
    }

    return int.Parse(text);
}

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

代码语言:javascript
复制
c_id = ConvertToDbInt(txtBox_id.Text);
c_afm = ConvertToDbInt(txtBox_afm.Text);

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

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

如果您非常喜欢条件运算符?:,那么只需确保这两个表达式返回相同的类型,在您的情况下是int?

代码语言:javascript
复制
c_id = (txtBox_id.Text != string.Empty) ? (int?)Convert.ToInt32(txtBox_id.Text) : null;

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

代码语言:javascript
复制
this.clientBrowserTableAdapter.Fill(
    erpDataSet.PelatesBrowser,
    c_id.GetValueOrDefault(),
    c_cn,
    c_afm.GetValueOrDefault(), 
    c_job,
    c_city);
票数 2
EN

Stack Overflow用户

发布于 2018-08-19 06:38:24

clientBrowserTableAdapter.Fill正在等待一个int。您正在传递一个Nullable<int>,它们是不一样的,并且没有发生隐式转换。您需要将其转换为int i.(int)c_id或使用Nullable<T>.Value属性。如果c_id为null,则必须处理这种情况,否则在转换时会出现异常。

顺便提一句,您的任务稍微差了一点,您可以这样做:

代码语言:javascript
复制
c_id = (txtBox_id.Text != string.Empty) ? Convert.ToInt32(txtBox_id.Text) : (int?)null;;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51915040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档