从静态方法结果创建一个列表

本文关键字:一个 列表 静态方法 结果 创建 | 更新日期: 2023-09-27 18:14:34

我有下面的代码片段。我想在Main()中调用FindEvenNumber(numbers)时显示新列表的结果。

不知道该怎么做…

static void Main(string[] args)
{
    List<int> numbers = new List<int>() { 2, 3, 4, 10, 12, 34 };
    //You can just call a static method you don't have to instantiate.
   FindEvenNumber(numbers);
}

public static List<int> FindEvenNumber(List<int> evenNumbers)
{
    List<int> evenNumbersNew = new List<int>();
    foreach (int ij in evenNumbers)
    {
        if (ij % 2 == 0)
            evenNumbersNew.Add(ij);
    }
    return evenNumbersNew;
}

从静态方法结果创建一个列表

您可以循环列表,但我将使用一行代码

Console.WriteLine(string.Join(",", FindEvenNumber(numbers)));

您甚至可以使用Linq.

FindEvenNumber嵌入到此一行代码中。
Console.WriteLine(string.Join(",", numbers.Where(i => i % 2 == 0)));

在main中,您可以替换

FindEvenNumber(numbers);

System.Console.WriteLine(String.Join(", ", FindEvenNumber(numbers)));

另外,如果你不需要List,我建议将你的方法改为:

    public static IEnumerable<int> FindEvenNumber(List<int> evenNumbers)
    {
        foreach (int ij in evenNumbers)
        {
            if (ij % 2 == 0)
                yield return ij;
        }
    }

,其中关键字yield为您完成工作。另一个建议是使用HashSet而不是List,如果你想要的数字是唯一的。

提供的其他答案似乎假设op完全了解字符串。Join和even LINQ。我之所以给出这个答案,是因为O.P.可能还不理解这些概念。

重述的问题是:

如何获得方法的结果并使用这些结果?

让我们分解Main方法:

static void Main(string[] args)
{
   // a new List has bee created with a set of integers
   List<int> numbers = new List<int>() { 2, 3, 4, 10, 12, 34 };
   // the numbers List is now being provided to the FindEvenNumber method,
   // but the results of the method are not used.
   FindEvenNumber(numbers);
   // To store the results of FindEvenNumber:
   List<int> evenNumbers = FindEvenNumber(numbers);
   // To use the results, loop over each item:
   foreach(int i in evenNumbers)
   {
      Console.WriteLine(i);
   }
}

注意事项:

  1. 原始的numbers列表永远不会被修改,它只是简单地给FindEvenNumber返回一个新的列表。
  2. 由于控制台,不需要对整数调用。tostring()。
使用字符串

。加入

如果目标是:

  • 打印FindEvenNumber返回的所有内容
  • 使用逗号分隔正在打印的数字。

而不是使用foreach循环并调用Console。WriteLine在循环中,我们可以使用。net字符串。方法将集合的内容连接到单个字符串中:

// To store the results of FindEvenNumber:
List<int> evenNumbers = FindEvenNumber(numbers);
// store the results of string.Join into a local variable:
string myNumbers = string.Join(",", evenNumbers);
// print the string to the Console:
Console.WriteLine(myNumbers);
使用LINQ

除了使用FindEvenNumber的静态方法之外,我们还可以利用LINQ将原始列表投影到新列表中,同时调用LINQ语句中的匿名方法:

IEnumerable<int> evenNumbers = numbers.Where(x => x % 2 == 0);

我们在上面所做的就是从FindEvenNumber中获取逻辑并将其移动到LINQ表达式中,该表达式表示:

对于numbers列表(用x表示)中的每个整数,找出能被2整除且余数为0的数。

在原FindEvenNumber中,逻辑为:ij % 2 == 0;逻辑在LINQ版本中是完全相同的,但是ij现在在LINQ版本中由x表示。

将所有概念结合在一起

既然一切都解释清楚了,这些概念就可以结合在一起了:

static void Main(string[] args)
{
    // a new List has bee created with a set of integers
    List<int> numbers = new List<int>() { 2, 3, 4, 10, 12, 34 };
    // store the results of string.Join into a local variable:
    string myNumbers = string.Join(",", numbers.Where(x => x % 2 == 0));
    // print the string to the Console:
    Console.WriteLine(myNumbers);
}

如果你想更紧凑:

static void Main(string[] args)
{
    // a new List has bee created with a set of integers
    List<int> numbers = new List<int>() { 2, 3, 4, 10, 12, 34 };
    // print the string to the Console:
    Console.WriteLine(string.Join(",", numbers.Where(x => x % 2 == 0)));
}