【发布时间】:2014-05-05 00:04:32
【问题描述】:
好的,我很确定 isNumber 终于可以工作了。感谢大家的帮助。我想我几乎已经准备好开始真正开始这个项目了。我只是想把头绕在列表上。
我正在做的是尝试一次检查一堆输入(如果它们是数字)并将结果存储在列表中。那样的话,要找出其中一个是否是数字,我只需检查第二个列表中的相应值即可。
所以,我的问题是我清楚地把 3 件东西放在了我的清单中,但是当我打印出项目数时,它总是显示 2。这到底有什么问题?具体来说,为什么 areNumbers 总是返回一个长度为 2 的列表,而我显然让它至少与 numberOfNumbers 一样长?
PS 我知道我的代码看起来还不是很好。我想在了解风格之前先了解基础知识。
static void Main(string[] args)
{
var maybe = new ArrayList(3);
maybe.Add(100f);
maybe.Add("not a number");
maybe.Add(1000);
Console.WriteLine(areNumbers(maybe).Count);
Console.ReadLine();
}
static ArrayList areNumbers(ArrayList maybeNumbers)
{
var theResults = new ArrayList(0);
var numbersEnumerator = maybeNumbers.GetEnumerator();
var numberOfNumbers = 0;
try
{
for (; ; )
{
numberOfNumbers = numberOfNumbers + 1;
numbersEnumerator.MoveNext();
var myIsNumber = isNumber(numbersEnumerator.Current);
var myAreNumbers = new ArrayList(numberOfNumbers);
myAreNumbers.Add(theResults);
myAreNumbers.Add(myIsNumber);
theResults = myAreNumbers;
}
}
catch (InvalidOperationException)
{
return theResults;
}
}
static bool isNumber(object theObject)
{
var s = theObject.GetType().ToString().ToUpper();
Console.WriteLine(s);
return theObject is int || theObject is Int64 || theObject is float || theObject is double;
}
【问题讨论】:
-
这一行的目的是什么?对于 (; ; ) {
-
看起来当 MoveNext 失败时 Catch 会抓住它。奇怪,伙计。
-
您正在向列表中添加三个项目。其中两个可以解释为数字,一个不能。然后打印来自
areNumbers的返回值的计数,并得到 2. 2 个值是数字。这不是你想要的吗? -
这是我见过的最糟糕的代码之一。首先,不是使用
foreach来迭代maybeNumbers,而是使用GetEnumerator,一个无限循环,并捕获由'MoveNext()! You can replace all of this mess with a simpleforeach` 循环抛出的InvalidOperationException。其次,您将bools 和ArrayLists 混合在ArrayList中。为什么? -
这家伙正在努力学习并寻求建议。鼓励他。