[英]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.