传递可变数量的参数

我需要编写一个函数来获取可变数量的参数。 我读了一些关于params []的内容,但我认为这不会对我的情况有用。 我的函数需要获取可变数量的整数,然后为每个整数取一个相应的bool值。 我必须遍历这些组合中的每一个并将它们输入到数据库中。 只是找人帮我指明正确的方向。 谢谢。

我建议构建一个结构,然后将它们作为参数传递。 在我的示例中,您的结构代表某种分数:

public struct RaceScore { public bool FinishedRace; public int Points; } 

您的方法签名将是:

 public void SaveScores(params RaceScore[] scores) 

以下是调用SaveScores的示例:

 RaceScore score = new RaceScore() { FinishedRace = true, Points = 20 }; RaceScore score2 = new RaceScore() { FinishedRace = false, Points = 15 }; SaveScores(score, score2); 

你可以用params来做到这一点,但是params需要是一些类或结构来保存你的int +你的bool。 如果您不想编写自己的类或结构,基类库中的KeyValuePair将起作用。

但是,如果您要迭代它们,我建议使用IEnumerable ,因为它使用起来要简单得多。

例如:

 public void SaveValues(IEnumerable> values) { foreach(var pair in values) { int intVal = pair.Key; bool boolVal = pair.Value; // Do something here... } } 

同样的事情适用于params,即:

 public void SaveValues(params KeyValuePair[] values) 

但是,这会迫使您创建一个数组。 使用IEnumerable将使用数组,但也可以使用值列表或LINQ查询结果等。这使得在许多情况下生成调用此函数更容易。

这是对的 – 它不会像描述的那样起作用。 你可以做的是使用结构来连接int和bool值。 结构的参数正在起作用:

 public struct IntBoolStruct { public bool BoolValue; public int IntValue; } public void YourMethod( params IntBoolStruct[] values ) {} 

编辑:根据你想要做的,可以为空的int也可以帮助你。

 public void YourMethod( params int?[] values ) {} 

另一个答案是:您可以使用简单的对象数组和参数来完成此操作。

  class paramstest { private void _passALot(params Object[] values) { System.Console.WriteLine(" [foreach]"); foreach (object o in values) { System.Console.Write(o.ToString() + ", "); } System.Console.WriteLine(System.Environment.NewLine + " [for]"); for (int i = 0; i < values.Length; i += 2) { int? testval = values[i] as Int32?; bool? testbool = values[i + 1] as Boolean?; System.Console.WriteLine(String.Format("Int: {0}, Bool: {1}", testval, testbool)); } } public void test() { _passALot(1, true, 2, false, 3, true, "q", false); } } 

给你

 [的foreach]
 1,真,2,假,3,真,q,假,
  [对于]
 Int:1,Bool:是的
 Int:2,Bool:错
 Int:3,Bool:是的
 Int:,Bool:错

使用适当的结构传递字典或列表会更好:)