从静态方法结果创建列表

时间:2016-10-23 17:44:22

标签: c# list

我有以下代码片段。我希望在FindEvenNumber(numbers)中调用Main()后显示新列表的结果。

不知道该怎么做..

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;
}

3 个答案:

答案 0 :(得分:2)

你可以循环你的列表,但我会使用单行

let tap = UITapGestureRecognizer(target: self, 
                           action: #selector(SignupViewController.selectPhoto(tap:)))

你甚至可以使用Linq将 FindEvenNumber 发送到这个单行中。

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

答案 1 :(得分:0)

在主要内容中,您可以替换

FindEvenNumber(numbers);

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

此外,如果您不需要列表,我建议您将方法更改为:

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

关键字yield为您完成工作。 另一个建议是,如果您希望这些数字是唯一的,请使用HashSet代替List

答案 2 :(得分:0)

提供的其他答案似乎是假设O.P.完全了解string.Join甚至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. 由于Console.WriteLine为你执行此操作,因此无需针对整数调用.ToString()。
  3. 使用string.Join

    如果目标是:

    ,我们可以更进一步
    • 打印从FindEvenNumber
    • 返回的所有内容
    • 使用逗号分隔正在打印的数字。

    我们可以使用.NET string.Join方法将集合的内容连接成一个字符串,而不是使用foreach循环并在循环中调用Console.WriteLine:

    // 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)));
    }