foreach问题

privatevoidbutton_Click(objectsender,EventArgse){intmax,min,sum=0;ArrayListscore=newA... private void button_Click(object sender, EventArgs e)
{
int max, min, sum = 0;
ArrayList score = new ArrayList(); //使用ArrayList()必须使用using System.Collections
foreach (Control con in groupBox1.Controls)
{
if (con is NumericUpDown)
{
NumericUpDown num = (NumericUpDown)con;
score.Add(num.Value);
}
}

if (con is NumericUpDown)已经判断了CON是NumericUpDown,为什么还要 NumericUpDown num = (NumericUpDown)con;强制转换呢
展开
 我来答
actonst
2013-09-19 · TA获得超过1.8万个赞
知道大有可为答主
回答量:8184
采纳率:80%
帮助的人:5266万
展开全部
表面看似多余是吧。既然已经判断出con是正确类型了,为什么还要转换。
is这个关键字用于检查对象是否与给定类型兼容。注意了,这里的is并不是“是”的意思,而是“兼容”。也就是说,如果被检查对象能够强制转换成给定类型并不发生异常,那么表示它们类型兼容。如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,
则is表达式的计算结果将是true;否则,发生异常时is表达式将返回false。
所以is 这个判断语句就是为了强制转换而用的。

即使判断过了兼容,现在从编译器的角度看con还是Conrol而不是NumericUpDown,所以如果不转换的话con里面是没有Value这个属性的,只有转换过了才可以用。
来自:求助得到的回答
赢桓
2013-09-19 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:73
采纳率:100%
帮助的人:55.5万
展开全部
is将判断被检查对象变量是否是给定类型的派生类型,只有是的情况下你强转才能成功,否则强转失败,num会为null,那么你num.Value就会报引用对象为null的异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式