我需要编写一个带有可变数量参数的函数。我读了一些关于params []的内容,但我认为这不会对我的情况有用。我的函数需要采用可变数量的整数,然后为每个整数采用相应的bool值。我必须遍历每个组合并将它们输入到数据库中。只是找人指出我正确的方向。感谢。
答案 0 :(得分:16)
我建议构建一个结构,然后将它们作为参数传递。在我的示例中,您的结构代表某种类型的分数:
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);
答案 1 :(得分:11)
你可以用params做到这一点,但是params需要是一些类或结构来保存你的int +你的bool。如果您不想编写自己的类或结构,基类库中的KeyValuePair<TKey,TValue>
将起作用。
但是,如果您要迭代它们,我建议使用IEnumerable<T>
代替,因为它使用起来要简单得多。
例如:
public void SaveValues(IEnumerable<KeyValuePair<int,bool>> values)
{
foreach(var pair in values)
{
int intVal = pair.Key;
bool boolVal = pair.Value;
// Do something here...
}
}
同样的事情适用于params,即:
public void SaveValues(params KeyValuePair<int,bool>[] values)
然而,这迫使你制作一个数组。使用IEnumerable<T>
将使用数组,但也可以使用值列表或LINQ查询结果等。这使得在许多情况下生成调用此函数更容易。
答案 2 :(得分:5)
这是对的 - 它不会像描述的那样起作用。你可以做的是使用结构来连接int和bool值。结构的参数正在起作用:
public struct IntBoolStruct {
public bool BoolValue;
public int IntValue;
}
public void YourMethod( params IntBoolStruct[] values ) {}
编辑:根据你想要做的事情,可以为空的int也可以帮助你。
public void YourMethod( params int?[] values ) {}
答案 3 :(得分:0)
另一个答案是:你可以用一个简单的对象数组和params来做到这一点。
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);
}
}
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, True, 2, False, 3, True, q, False, [for] Int: 1, Bool: True Int: 2, Bool: False Int: 3, Bool: True Int: , Bool: False
传递具有适当结构的字典或列表会更好:)