Хорошо, я уверен, что isNumber, наконец, работает. Спасибо всем за помощь. Я думаю, что я почти готов начать работу над этим проектом по-настоящему. Я просто пытаюсь обвести голову списками.Список содержит только первые два элемента:
Что я делаю, это попытка проверить кучу вводов сразу, если они являются числами и сохранять результаты в списке. Таким образом, чтобы узнать, является ли один из них числом, я могу просто проверить соответствующее значение во втором списке, чтобы узнать.
Итак, моя проблема в том, что я четко помещаю 3 вещи в свой список, но когда у меня есть распечатка, количество элементов всегда отображает 2. Что, черт возьми, не так с этим? В частности, почему isNumbers всегда возвращают список длины 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;
}
Что намерение этой линии? for (;;) { –
бесконечный цикл? – Artur
Похоже, Catch захватывает его, когда MoveNext терпит неудачу. Странно, мужик. – Almo