传递可变数量的参数

Chr*_*cia 5 c#

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

Mat*_*ley 16

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

public struct RaceScore
{
     public bool FinishedRace;
     public int Points;
}
Run Code Online (Sandbox Code Playgroud)

您的方法签名将是:

public void SaveScores(params RaceScore[] scores)
Run Code Online (Sandbox Code Playgroud)

以下是调用SaveScores的示例:

RaceScore score = new RaceScore() { FinishedRace = true, Points = 20 };
RaceScore score2 = new RaceScore() { FinishedRace = false, Points = 15 };
SaveScores(score, score2);
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,结构实际上只适用于几个变量.一个类更适合除此之外的任何东西. (2认同)

Ree*_*sey 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...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public void SaveValues(params KeyValuePair<int,bool>[] values)
Run Code Online (Sandbox Code Playgroud)

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


tan*_*ius 5

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

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

public void YourMethod( params IntBoolStruct[] values ) {}
Run Code Online (Sandbox Code Playgroud)

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

public void YourMethod( params int?[] values ) {}
Run Code Online (Sandbox Code Playgroud)