C# 传递可变数量的参数

C# 传递可变数量的参数,c#,C#,我需要写一个函数,它将接受可变数量的参数。我读了一些关于params[]的文章,但我认为这在我的案例中不起作用。我的函数需要取一个可变的整数,然后为每个整数取一个相应的布尔值。我必须迭代这些组合,并将它们输入到数据库中。只是想找个人给我指出正确的方向。谢谢。没错-它不会按描述的那样工作。您可以使用一个结构来连接int和bool值。结构的参数正在工作: public struct IntBoolStruct { public bool BoolValue; public int Int

我需要写一个函数,它将接受可变数量的参数。我读了一些关于params[]的文章,但我认为这在我的案例中不起作用。我的函数需要取一个可变的整数,然后为每个整数取一个相应的布尔值。我必须迭代这些组合,并将它们输入到数据库中。只是想找个人给我指出正确的方向。谢谢。

没错-它不会按描述的那样工作。您可以使用一个结构来连接int和bool值。结构的参数正在工作:

public struct IntBoolStruct {
   public bool BoolValue;
   public int IntValue;
}

public void YourMethod( params IntBoolStruct[] values ) {}
编辑:根据您想做什么,一个可为null的int也可能对您有所帮助

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

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

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的类或结构<如果您不想编写自己的类或结构,则基类库中的code>KeyValuePair可以工作

但是,如果您要遍历它们,我建议使用
IEnumerable
,因为它使用起来更简单

例如:

public void SaveValues(IEnumerable<KeyValuePair<int,bool>> values)
{
    foreach(var pair in values)
    {
        int intVal = pair.Key;
        bool boolVal = pair.Value;
        // Do something here...
    }
}
public void保存值(IEnumerable值)
{
foreach(值中的var对)
{
int intVal=pair.Key;
bool boolVal=pair.Value;
//在这里做点什么。。。
}
}
同样的事情也适用于params,即:

public void SaveValues(params KeyValuePair<int,bool>[] values)
public void保存值(参数KeyValuePair[]值)

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

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

    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);
        }
    }
类参数{
私有void _passALot(参数对象[]值){
System.Console.WriteLine(“[foreach]”);
foreach(值中的对象o){
System.Console.Write(o.ToString()+“,”);
}
System.Console.WriteLine(System.Environment.NewLine+“[for]”);
对于(int i=0;i

给你

[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 [论坛] 1,正确,2,错误,3,正确,q,错误, [为] Int:1,Bool:True Int:2,Bool:False Int:3,Bool:True Int:,Bool:False
不过,传递带有适当结构的字典或列表会更好:)

应该注意的是,结构实际上只适用于几个变量。除此之外,类更适合用于任何其他用途。出于好奇,为什么结构不适合用于多个变量?部分原因是结构的传递值语义:每当将一个传递到方法时,都会创建一个副本,这比传递引用更昂贵(如果您传递的是引用类型,则会发生这种情况).1对于可为空的建议。很好的一点-这可能足够了,取决于bool的目的。+1.比我的字典答案更好的解决方案,我不应该假设整数是ID。这听起来很完美,但我不认为它在1.1中可用,这是我在这个项目中受限的。我应该注意到那个