Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表仅包含前两项_C#_List - Fatal编程技术网

C# 列表仅包含前两项

C# 列表仅包含前两项,c#,list,C#,List,好的,我很确定iNumber终于开始工作了。谢谢大家的帮助。我想我已经准备好开始这个项目了。我只是想把我的头脑集中在清单上 我正在做的是尝试立即检查一组输入,如果它们是数字,并将结果存储在列表中。这样,为了确定其中一个是否是数字,我只需检查第二个列表中的相应值即可 所以,我的问题是,我在我的列表中明确地放了3件事情,但是当我让它打印出项目的数量时,它总是显示2件。这到底是怎么回事?具体来说,为什么areNumbers总是返回长度为2的列表,而我显然使它至少与numberOfNumbers一样长

好的,我很确定iNumber终于开始工作了。谢谢大家的帮助。我想我已经准备好开始这个项目了。我只是想把我的头脑集中在清单上

我正在做的是尝试立即检查一组输入,如果它们是数字,并将结果存储在列表中。这样,为了确定其中一个是否是数字,我只需检查第二个列表中的相应值即可

所以,我的问题是,我在我的列表中明确地放了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;
    } 
  • 摆脱无休止的循环
  • 反复浏览你的数字
  • 围绕着尝试。。。只抓一个数字
如果有例外,请不要增加数量。 不要为此返回泛型,因为您真正需要返回的只是一个整数

你需要(伪代码):

当然,假设isNumber在您的maybe number不是数字时抛出一些execption。

  • 摆脱无休止的循环
  • 反复浏览你的数字
  • 围绕着尝试。。。只抓一个数字
如果有例外,请不要增加数量。 不要为此返回泛型,因为您真正需要返回的只是一个整数

你需要(伪代码):


当然,假设isNumber在您的maybe number不是数字时抛出一些execption。

1。不要依赖try/catch实现正常的代码流。try/catch用于捕捉异常情况

2.为什么需要构建isNumber方法?double.tryParse或Convert.ToDouble()也会做类似的事情(通过谷歌查找差异)

3.不知道myAreNumbers应该做什么,但基本上是在每次迭代时向新列表添加一个bool和一个列表

static ArrayList areNumbers(ArrayList maybeNumbers) 
{  
    var theResults = new ArrayList(0);
    foreach(var possibleNumber in maybeNumbers) 
    {
        double myDouble;
        if (double.tryParse(possibleNumber, out myDouble))
                   theResults.Add(possibleNumber);// OR theResults.Add(myDouble); //depending on what you want
    }
    return theResults; 
}

1.不要依赖try/catch实现正常的代码流。try/catch用于捕捉异常情况

2.为什么需要构建isNumber方法?double.tryParse或Convert.ToDouble()也会做类似的事情(通过谷歌查找差异)

3.不知道myAreNumbers应该做什么,但基本上是在每次迭代时向新列表添加一个bool和一个列表

static ArrayList areNumbers(ArrayList maybeNumbers) 
{  
    var theResults = new ArrayList(0);
    foreach(var possibleNumber in maybeNumbers) 
    {
        double myDouble;
        if (double.tryParse(possibleNumber, out myDouble))
                   theResults.Add(possibleNumber);// OR theResults.Add(myDouble); //depending on what you want
    }
    return theResults; 
}

正如评论员所说,返回值
areNumbers
最多是一个包含2项的ArrayList(第一项是0到N-2项的布尔值的ArrayList;第二项是第(N-1)个值的布尔值)。如果我在头脑中正确地处理了代码,那么如果发送空的ArrayList,您将得到一个空的ArrayList

在一项之后:

areNumbers[0]: [] // empty ArrayList areNumbers[1]: true 如果您是预LINQ,请尝试以下方法:

List<object> maybeNumbers = new List<object>();
maybeNumbers.Add(100f);
maybeNumbers.Add("not a number");
maybeNumbers.Add(1000);

List<object> areNumbers = new List<object>();

foreach(object maybe in maybeNumbers)
{
    if (isNumber(maybe))
        areNumbers.Add(maybe);
}

正如评论员所说,返回值
areNumbers
最多是一个包含2项的ArrayList(第一项是0到N-2项的布尔值的ArrayList;第二项是第(N-1)个值的布尔值)。如果我在头脑中正确地处理了代码,那么如果发送空的ArrayList,您将得到一个空的ArrayList

在一项之后:

areNumbers[0]: [] // empty ArrayList areNumbers[1]: true 如果您是预LINQ,请尝试以下方法:

List<object> maybeNumbers = new List<object>();
maybeNumbers.Add(100f);
maybeNumbers.Add("not a number");
maybeNumbers.Add(1000);

List<object> areNumbers = new List<object>();

foreach(object maybe in maybeNumbers)
{
    if (isNumber(maybe))
        areNumbers.Add(maybe);
}

这将循环遍历一个对象列表,并给出一个布尔响应,让您知道它们是否是数字,我认为这就是您的代码最终要做的

var testNumbers = new List<object>();
testNumbers.Add(15);
testNumbers.Add("AUUUGHH");
testNumbers.Add(42);

foreach (var i in testNumbers)
    Console.WriteLine(Microsoft.VisualBasic.Information.IsNumeric(i));
var testNumbers=新列表();
增加(15);
添加(“AUUUGHH”);
增加(42);
foreach(testNumbers中的变量i)
Console.WriteLine(Microsoft.VisualBasic.Information.IsNumeric(i));

确保添加对Microsoft.VisualBasic命名空间的引用以使用IsNumeric()

这将循环遍历对象列表,并给出一个布尔响应,让您知道它们是否是数字,我认为这就是您的代码最终要做的

var testNumbers = new List<object>();
testNumbers.Add(15);
testNumbers.Add("AUUUGHH");
testNumbers.Add(42);

foreach (var i in testNumbers)
    Console.WriteLine(Microsoft.VisualBasic.Information.IsNumeric(i));
var testNumbers=新列表();
增加(15);
添加(“AUUUGHH”);
增加(42);
foreach(testNumbers中的变量i)
Console.WriteLine(Microsoft.VisualBasic.Information.IsNumeric(i));
确保添加对Microsoft.VisualBasic命名空间的引用,以便使用IsNumeric()

尝试以下操作:

static void Main(string[] args)
{
    var maybe = new ArrayList(3);
    maybe.Add(100f);
    maybe.Add("not a number");
    maybe.Add(1000);
    foreach (var item in maybe)
    {
        Console.WriteLine(item);
    }
    ArrayList res = new ArrayList(maybe.ToArray().Where((o) => o.IsNumber()).ToArray());
    foreach (var item in res)
    {
        Console.WriteLine(item);
    }
}

public static bool IsNumber(this object item)
{
    const TypeCode filter = TypeCode.Double | TypeCode.Int16 | TypeCode.Int32 | TypeCode.Int64
        | TypeCode.Single | TypeCode.UInt16 | TypeCode.UInt32 | TypeCode.UInt64;
    Type t = item.GetType();
    if (t.IsPrimitive)
    {                
        TypeCode code = System.Type.GetTypeCode(t);
        return (code & filter) > 0;
    }
    return false;
}
试试这个:

static void Main(string[] args)
{
    var maybe = new ArrayList(3);
    maybe.Add(100f);
    maybe.Add("not a number");
    maybe.Add(1000);
    foreach (var item in maybe)
    {
        Console.WriteLine(item);
    }
    ArrayList res = new ArrayList(maybe.ToArray().Where((o) => o.IsNumber()).ToArray());
    foreach (var item in res)
    {
        Console.WriteLine(item);
    }
}

public static bool IsNumber(this object item)
{
    const TypeCode filter = TypeCode.Double | TypeCode.Int16 | TypeCode.Int32 | TypeCode.Int64
        | TypeCode.Single | TypeCode.UInt16 | TypeCode.UInt32 | TypeCode.UInt64;
    Type t = item.GetType();
    if (t.IsPrimitive)
    {                
        TypeCode code = System.Type.GetTypeCode(t);
        return (code & filter) > 0;
    }
    return false;
}

这条线的目的是什么?对于(;;){看起来当MoveNext失败时捕获就抓住了。奇怪,伙计。你在列表中添加了三项。其中两项可以解释为数字,一项不能。然后你从
areNumbers
打印返回值的计数,得到2。2个值是数字。这不是你想要的吗?这是我见过的最糟糕的代码之一。首先,您不是使用
foreach
来迭代
maybeNumbers
,而是使用
GetEnumerator
,一个无限循环,并捕获“MoveNext()”引发的
invalidoOperationException
!你可以用一个简单的
foreach`loop来代替所有的混乱。其次,你把
bool
s和
ArrayList
s的混合物放在一个
ArrayList
中。为什么?这个家伙试图学习并征求建议。鼓励他。这行的目的是什么?为了(;;){看起来当MoveNext失败时捕获就抓住了。奇怪,伙计。你在列表中添加了三项。其中两项可以解释为数字,一项不能。然后你从
areNumbers
打印返回值的计数,得到2。2个值是数字。这不是你想要的吗?这是我见过的最糟糕的代码之一。首先,您不是使用
foreach
来迭代
maybeNumbers
,而是使用
GetEnumerator
,一个无限循环,并捕获“MoveNext()
”抛出的
invalidoOperationException
!您可以用一个简单的static void Main(string[] args) { var maybe = new ArrayList(3); maybe.Add(100f); maybe.Add("not a number"); maybe.Add(1000); foreach (var item in maybe) { Console.WriteLine(item); } ArrayList res = new ArrayList(maybe.ToArray().Where((o) => o.IsNumber()).ToArray()); foreach (var item in res) { Console.WriteLine(item); } } public static bool IsNumber(this object item) { const TypeCode filter = TypeCode.Double | TypeCode.Int16 | TypeCode.Int32 | TypeCode.Int64 | TypeCode.Single | TypeCode.UInt16 | TypeCode.UInt32 | TypeCode.UInt64; Type t = item.GetType(); if (t.IsPrimitive) { TypeCode code = System.Type.GetTypeCode(t); return (code & filter) > 0; } return false; }