参数数组是否可以是C#中列表的保留类型?
params[]变量是否可以保存已通过C#中的方法作为参数传递的列表 编写了一个方法(AddIntegers),该方法要求将多个值作为参数。在方法的参数列表上,有一个params[]变量,当在Main方法中进行方法调用时,该变量正在接收抛出的值。但有一个例外是“无法从system.collections.generic.List转换为整数。有人知道为什么会发生这种情况吗?”参数数组是否可以是C#中列表的保留类型?,c#,C#,params[]变量是否可以保存已通过C#中的方法作为参数传递的列表 编写了一个方法(AddIntegers),该方法要求将多个值作为参数。在方法的参数列表上,有一个params[]变量,当在Main方法中进行方法调用时,该变量正在接收抛出的值。但有一个例外是“无法从system.collections.generic.List转换为整数。有人知道为什么会发生这种情况吗?” **** this is within the Main Method**** strin
**** 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;
}
****这在主方法****
string Demostring=Console.ReadLine();
string[]tokens=Demostring.Split(',');
List nums=新列表();
内在统一;
foreach(令牌中的字符串s)
{
if(Int32.TryParse(s,out-oneNum))
添加(合一);
}
int result1=加法器(nums);
****这是要调用的方法****
公共静态int AddIntegers(参数int[]Restnum)
{
int结果=0;
foreach(Restnum中的int-temp)
{
结果+=温度;
}
返回结果;
}
否,列表
不是int[]
,因此不能将其用作int[]
参数的参数。(它是参数数组的事实不会改变这一点。)
通常,解决方法是使用两个重载—一个接受参数数组,另一个接受IEnumerable
:
公共静态整数加法器(参数int[]数字)=>
加法器((IEnumerable)数);
公共静态整数加法器(IEnumerable number)
{
...
}
请注意,对于这个特定的示例,您当然可以调用Sum
扩展方法从LINQ到对象
有人建议参数数组能够接受
IReadOnlyList
而不仅仅是T[]
,但这在C中还没有实现。(我个人很喜欢它…这是因为您试图在数组参数中插入一个列表
与此相反:
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;
}
公共静态整数加法器(列表编号)
{
返回addinteger(number.ToArray());
}
公共静态int AddIntegers(参数int[]Restnum)
{
int结果=0;
foreach(Restnum中的int-temp)
{
结果+=温度;
}
返回结果;
}
然后像平常一样调用它。private void按钮4\u单击(对象发送者,事件参数e)
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;
}
{
常量字符串demostring=“1,2,3,4,5,6”;
var tokens=demostring.Split(',');
var nums=新列表();
foreach(令牌中的var s)
if(内锥虫(外锥虫)
添加(合一);
var result1=加法器(nums);
}
公共静态int AddIntegers(List restnum)
{
var结果=0;
foreach(restnum中的变量temp)
结果+=温度;
返回结果;
}
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;
}