比较怪异的数据类型转换问题
问题表现很简单,我在.aspx.cs中声明了一个protected的string类型变量并赋值,然后使用了Page.DataBind()用于绑定变量显示。在.aspx中有一个repeater,在repeater的itemtemplate中把这个string转为整数并显示,如果用Convert.ToInt16就可以正常显示,没有问题,但如果用int.Parse就会提示值不能为空,但其实这个string肯定是有值的。 --------------------编程问答-------------------- Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。
如果能确保传递的字符串为整形数字字符串,int.Parse是不会 有问题的,如果格式非法,需要异常处理 --------------------编程问答--------------------
int reValue;--------------------编程问答-------------------- 我还是贴代码吧,这样更直观些,呵呵。我觉得还是要再强调一次,肯定有值!
int.TryParse("", out reValue);
Console.WriteLine(reValue);//输出0
--------------------编程问答-------------------- 如果把int.Parse放到repeater外面,就会正常显示。如:<%=int.Parse(classid) %>,感觉和repeater的事件顺序及page的加载顺序有关,具体原因还是不清楚。 --------------------编程问答-------------------- 2种转换,原理不一样,一种是强制转换,一种是运算符重载,我觉得是这么回事,运算符重载的,应该代码处理了异常,所以不报错。 --------------------编程问答-------------------- <%#int.Parse(Eval("classid").ToString())%> --------------------编程问答-------------------- 试过了,不行。发完贴子后我也以为是数据类型的问题,因为int.Parse接受的string类型的,但实际测试还是不行,会报错。 --------------------编程问答--------------------
<asp:Repeater ID="LeftMenu" runat="server">
<ItemTemplate>
<li class="clearfix" ><a href="event.aspx?classid=<%#Eval("ClassID") %>">
<%#int.Parse(classid)%>报错
<%#Convert.ToInt16(classid)%>不报错,显示为数据库实际值:1
<%#classid%>//显示为数据库实际值:1
</a></li>
</ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<p><%#Eval("Key") %></p>
<p> <%#testid %> ,<%#int.Parse(testid) %> ,<%# Convert.ToInt32(testid) %></p>
</ItemTemplate>
</asp:Repeater>
protected string testid = "1";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Dictionary<string, string> list = new Dictionary<string, string>();
list.Add("sss", "sss");
list.Add("dd", "sss");
Repeater1.DataSource = list;
Repeater1.DataBind();
}
}
没有发现任何问题,怀疑楼主数据库存的是不是浮点数,int.parse浮点数会出错的。
补充:.NET技术 , ASP.NET