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;强制转换呢 展开
{
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;强制转换呢 展开
2个回答
展开全部
表面看似多余是吧。既然已经判断出con是正确类型了,为什么还要转换。
is这个关键字用于检查对象是否与给定类型兼容。注意了,这里的is并不是“是”的意思,而是“兼容”。也就是说,如果被检查对象能够强制转换成给定类型并不发生异常,那么表示它们类型兼容。如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,
则is表达式的计算结果将是true;否则,发生异常时is表达式将返回false。
所以is 这个判断语句就是为了强制转换而用的。
即使判断过了兼容,现在从编译器的角度看con还是Conrol而不是NumericUpDown,所以如果不转换的话con里面是没有Value这个属性的,只有转换过了才可以用。
is这个关键字用于检查对象是否与给定类型兼容。注意了,这里的is并不是“是”的意思,而是“兼容”。也就是说,如果被检查对象能够强制转换成给定类型并不发生异常,那么表示它们类型兼容。如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,
则is表达式的计算结果将是true;否则,发生异常时is表达式将返回false。
所以is 这个判断语句就是为了强制转换而用的。
即使判断过了兼容,现在从编译器的角度看con还是Conrol而不是NumericUpDown,所以如果不转换的话con里面是没有Value这个属性的,只有转换过了才可以用。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询