[英]Can a params array be a holding type for a list in C#?
params []变量是否可以保存一个列表,该列表已作为参数通过C#中的方法传递?
写了一个方法(AddIntegers),需要将多个值作为参数。 在方法的参数列表中,当在Main方法中进行方法调用时,有一个params []变量正在接收抛出的值。 但有一个例外,说“无法从system.collections.generic.List <>转换为整数。任何人都知道为什么会发生这种情况?
**** this is within the Main Method****
string Demostring = Console.ReadLine();
string[] tokens = Demostring.Split(',');
List<int> nums = new List<int>();
int oneNum;
foreach(string s in tokens)
{
if (Int32.TryParse(s, out oneNum))
nums.Add(oneNum);
}
int result1 = AddIntegers(nums);
**** this is the method to be called****
public static int AddIntegers(params int[] Restnum)
{
int result = 0;
foreach(int temp in Restnum)
{
result += temp;
}
return result;
}
不, List<int>
不是int[]
,因此您不能将它用作int[]
参数的参数。 (事实上,它是一个参数数组不会改变它。)
通常,解决方案是有两个重载 - 一个接受参数数组,另一个接受IEnumerable<T>
:
public static int AddIntegers(params int[] numbers) =>
AddIntegers((IEnumerable<int>) numbers);
public static int AddIntegers(IEnumerable<int> numbers)
{
...
}
请注意,对于此特定示例,您当然可以从LINQ调用Sum
扩展方法到Objects。
有些建议让参数数组能够接受IReadOnlyList<T>
而不仅仅是T[]
,但这还不在C#中。 (亲爱的,我会爱上它的。)
这是因为您尝试在数组参数中插入List。
而不是这个:
int result1 = AddIntegers(nums);
你可以这样做:
int result1 = AddIntegers(nums.ToArray());
或者:
public static int AddIntegers(List<int> numbers)
{
return AddIntegers(numbers.ToArray());
}
public static int AddIntegers(params int[] Restnum)
{
int result = 0;
foreach(int temp in Restnum)
{
result += temp;
}
return result;
}
然后像平时那样打电话。
private void button4_Click(object sender, EventArgs e)
{
const string demostring = "1,2,3,4,5,6";
var tokens = demostring.Split(',');
var nums = new List<int>();
foreach (var s in tokens)
if (int.TryParse(s, out var oneNum))
nums.Add(oneNum);
var result1 = AddIntegers(nums);
}
public static int AddIntegers(List<int> restnum)
{
var result = 0;
foreach (var temp in restnum)
result += temp;
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.