Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中为整数赋值null#_C#_.net_Winforms - Fatal编程技术网

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

C# 在C中为整数赋值null#,c#,.net,winforms,C#,.net,Winforms,我有一个winforms应用程序,我试图在tableadapter中传递5个参数以执行查询,但我得到错误“无法从'int'转换为'int'。所有参数都可以为null private int?c_id; 私有字符串c_cn; 私人国际原子力显微镜; 私人字符串c_作业; 私家弦琴城; 私有void btnView\u单击(对象发送者,事件参数e){ c_id=(txtBox_id.Text!=string.Empty)?c_id=Convert.ToInt32(txtBox_id.Text):c_

我有一个winforms应用程序,我试图在tableadapter中传递5个参数以执行查询,但我得到错误“无法从'int'转换为'int'。所有参数都可以为null

private int?c_id;
私有字符串c_cn;
私人国际原子力显微镜;
私人字符串c_作业;
私家弦琴城;
私有void btnView\u单击(对象发送者,事件参数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参数上。有什么想法吗?

clientBrowserTableAdapter.Fill
需要一个
int
。您传递的是一个
Nullable
,它们不相同,也没有发生隐式转换。您需要将其强制转换为
int
,即
(int)c_id
或使用
null
.Value
属性。如果
c_id
为null,则必须处理该情况,否则在强制转换时将出现异常

作为旁注,您的作业稍微有点偏离,您只需执行以下操作:

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

clientBrowserTableAdapter.Fill
需要一个
int
。您正在传递一个
可为null的
,它们不相同,并且没有发生隐式转换。您需要将其强制转换为
int
,即
(int)c_id
或使用
null
.Value
属性。如果
c_id
为null,则必须处理该情况,否则在强制转换时将出现异常

作为旁注,您的作业稍微有点偏离,您只需执行以下操作:

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

您可以创建一个将字符串转换为
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?

第一个_表达式和第二个_表达式的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换

如果您非常喜欢条件运算符
?:
,那么请确保这两个表达式返回相同的类型,在您的示例中为
int?

c_id = (txtBox_id.Text != string.Empty) ? (int?)Convert.ToInt32(txtBox_id.Text) : null;
当在第
行this.clientBrowserTableAdapter.Fill(…
)上抛出异常时,这意味着
Fill
方法需要类型为
int
的参数,您可以通过调用
.GetValueOrDefault()
轻松地将可为null的int转换为int


您可以创建一个将字符串转换为
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?

第一个_表达式和第二个_表达式的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换

如果您非常喜欢条件运算符
?:
,那么请确保这两个表达式返回相同的类型,在您的示例中为
int?

c_id = (txtBox_id.Text != string.Empty) ? (int?)Convert.ToInt32(txtBox_id.Text) : null;
当在第
行this.clientBrowserTableAdapter.Fill(…
)上抛出异常时,这意味着
Fill
方法需要类型为
int
的参数,您可以通过调用
.GetValueOrDefault()
轻松地将可为null的int转换为int


我认为您在分配给
c_city
时有一个错误,三元运算符检查
txtBox_作业。Text
不是空的,而不是
txtBox_city.Text
。您不需要在三元运算符内部分配,只需分配返回值。
c_id=(txtBox_id.Text!=string.empty)?Convert.ToInt32(txtBox id.Text):null;
我想您在对
c_city
的赋值中有一个错误,三元运算符检查
txtBox\u作业。Text
不是空的,而不是
txtBox\u city.Text
。您不需要在三元运算符内部赋值,只需赋值。
c_id=(txtBox\u id.Text!=string.empty)→Convert.ToInt32(txtBox_id.Text):null;
我尝试了此操作,但仍然出现错误“无法从'int'转换为'int'”我尝试了此操作,但仍然出现错误“无法从'int'转换为'int'”"在tableadapter.fill方法上,c_idparameter@NikosL24,这意味着,
.Fill
方法需要类型为
int
的参数,请检查更新后的答案如何将
int?
转换为
int
好,它停止抛出错误。现在我需要找到为什么我无法从表适配器lolon tableadapter.Fill me获取任何数据方法,c_idparameter@NikosL24,这意味着,
.Fill
方法需要类型为
int
的参数,请检查更新的答案如何将
int?
转换为
int
确定它停止抛出错误。现在我需要找到为什么我无法从表适配器lol获取任何数据