我有以下代码片段。我希望在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;
}
答案 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);
}
}
几点说明:
numbers
列表永远不会被修改,只需提供给FindEvenNumber
,它会返回一个新列表。如果目标是:
,我们可以更进一步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);
使用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)));
}