加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Nullable(int?)继续抛出不可为空的异常

发布时间:2020-12-16 00:07:25 所属栏目:百科 来源:网络整理
导读:这是我第一次遇到这种情况 – 当然这不是很多,但我从不需要与集体协商作为我的搜索,同时表明它可以完成,我无法工作出来. 问题是如果用户将文本框留空,C#会自动在回发上输入零并进入数据库.我只想将文本框留空. 我在那里宣布了一个属性: private int? _PageN
这是我第一次遇到这种情况 – 当然这不是很多,但我从不需要与集体协商作为我的搜索,同时表明它可以完成,我无法工作出来.

问题是如果用户将文本框留空,C#会自动在回发上输入零并进入数据库.我只想将文本框留空.

我在那里宣布了一个属性:

private int? _PageNumber = null;

public int? PageNumber
{
    get { return _PageNumber; }
    set { _PageNumber = value; }
}

在我的代码文件中我有:

if (tbPageNumber.Text != "")
        ia.PageNumber = Convert.ToInt32(tbPageNumber.Text);
    else
        ia.PageNumber = null;

这是我得到例外的地方:

CS0037: Cannot convert null to 'int' because it is a non-nullable value type

所以我想如果我不能改变类型,也许我可以改变输出.所以我想也许我可以把它放在texbox的text属性中来伪造它:

'<%# Eval("PageNumber") == 0 ? null:Eval("PageNumber") %>'

抛出CS0019:运算符’==’不能应用于’object’和’int’异常类型的操作数.

为什么这么该死?

解决方法

为了非常直接,ia.PageNumber无法引用您提供的定义,因为以下代码不仅编译和运行,而且写出设置为NULL:

private int? _PageNumber = null;

public int? PageNumber
{
    get { return _PageNumber; }
    set { _PageNumber = value; }
}

if (string.Empty != "")
{
    PageNumber = Convert.ToInt32(string.Empty);
    Console.WriteLine("Setting to value.");
}
else
{
    PageNumber = null;
    Console.WriteLine("Setting to NULL.");
}

底线是ia.PageNumber不是int?或_PageNumber不是int?.为了进一步具体化我的立场,以下代码:

PageNumber = Convert.ToInt32(" ");
Console.WriteLine("Setting to value {0}.",PageNumber);

抛出预期的异常:

Input string was not in a correct format.

所以问题也不能是填充字符串.最后具体我的立场,以下代码:

PageNumber = Convert.ToInt32("");
Console.WriteLine("Setting to value {0}.",PageNumber);

抛出预期的异常:

Input string was not in a correct format.

所以问题也不能是一个空字符串.并且根据jadarnel27发表的评论进一步具体说明你可能正在转换null,实际上是按预期成功的,以下代码:

PageNumber = Convert.ToInt32(null);
Console.WriteLine("Setting to value {0}.",PageNumber);

实际上,编译,运行和抛出没有执行.它按预期将字符串Setting输出为值0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读