从静态方法结果创建一个列表
本文关键字:一个 列表 静态方法 结果 创建 | 更新日期: 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);
}
}
注意事项:
- 原始的
numbers
列表永远不会被修改,它只是简单地给FindEvenNumber
返回一个新的列表。 - 由于控制台,不需要对整数调用。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)));
}