c#在循环的每次迭代中做不同的事情
本文关键字:不同的事 迭代 循环 | 更新日期: 2023-09-27 18:06:10
我正在为Sifteo Cubes上的儿童制作一款游戏。我试着把一个句子一个字一个字地装到立方体上。我对Sifteo立方体有一些经验,但我如何以更漂亮的方式解决这个问题?如果可能的话,更一般一些。
foreach (CubeWrapper wrapper in mWrappers) {
if (i == 0) {
wrapper.setWord (w1);
} else if (i == 1) {
wrapper.setWord (w2);
} else if (i == 2) {
wrapper.setWord (w3);
} else if (i == 3) {
wrapper.setWord (w4);
} else if (i == 4) {
wrapper.setWord (w5);
}
i++;
}
我总是将w1添加到第一个包装器,依此类推。
任何帮助将不胜感激!
您可以这样做:
String[] words = new String[] {w1,w2,w3,w4,w5};
foreach (CubeWrapper wrapper in mWrappers)
{
wrapper.setWord(words[i++]);
}
此解决方案是有效的,但请记住,如果words
数组小于mWrappers
集合,您将收到IndexOutOfBoundsException
。所以同步对数组的访问现在是你的工作了
如果你不能/不想改变你的类,那么你可以使用反射来做这样的事情(尽管这可能不是正确的事情在这里):
foreach (CubeWrapper wrapper in mWrappers) {
var name = "w" + (i+1).ToString();
var value = this.GetType().GetProperty(name).GetValue(this);
wrapper.setWord(value);
}
的例子:
public class ABC
{
public int w1 { get; set; }
public int w2 { get; set; }
public int w3 { get; set; }
public ABC()
{
w1 = 7;
w2 = 8;
w3 = 9;
}
public void DoSomething()
{
var i = 1;
var name = "w" + (i + 1).ToString(); // w2
var value = (int)this.GetType().GetProperty(name).GetValue(this);
DoSomething(value);
}
public void DoSomething(int curr)
{
Console.WriteLine(curr); // 8
}
}
用法:
ABC abc = new ABC();
abc.DoSomething();
您可以使用random类从数组中获取一个随机单词,如下所示…
String[] words = new String[] { "w1", "w2", "w3", "w4", "w5" };
Random r = new Random(0);
int randomNumber = r.Next(0, words.Length);
foreach (CubeWrapper wrapper in mWrappers)
{
wrapper.setWord(words[randomNumber]);
}