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)
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查询结果等.这使得在许多情况下生成调用此函数更容易.
这是对的 - 它不会像描述的那样起作用.你可以做的是使用结构来连接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)