if (stack == "1" && tray == 6)
{
stack = "2";
tray = 1;
}
else if (stack == "2" && tray == 12)
{
stack = "1";
tray = 2;
}
tray++;
Run Code Online (Sandbox Code Playgroud)
我只需要增加堆栈,托盘这样:
1, 1
1, 2
1, 3
...
1, 6
...
2, 1
2, 2
2, 3
2, 4
...
...
2,12
1,2
..
..
Run Code Online (Sandbox Code Playgroud)
上面的代码对我来说很好; 但是,我想知道是否有更好,更简洁的重写方式?
在我的头顶,似乎你想要做的是结合基数6和基数10.你应该能够把它想象成一个乘数为6的定点数.
public class StackTray {
int _stackTray;
public StackTray() : this(0, 0) { }
public StackTray(int stack, int tray)
{
if (stack < 0) throw new ArgumentOutOfRangeException("stack");
if (tray < 0 || tray >= 6) throw new ArgumentOutOfRangeException("tray");
_stackTray = stack * 6 + tray;
}
public int Stack { get { return _stackTray / 6; } }
public int Tray { get { return _stackTray % 6; } }
public void Increment() { _stackTray++; }
public void Decrement() { if( _stackTray == 0) return; _stackTray--; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,您获得的值将基于0,而不是基于示例中的1.
正在使用:
StackTray st = new StackTray();
for (int i=0; i < 10; i++) {
st.Increment();
Console.WriteLine("Stack: {0} Tray: {1}", st.Stack + 1, st.Tray + 1); // tada - one based
}
for (int i=0; i < 5; i++) {
st.Decrement();
Console.WriteLine("Stack: {0} Tray: {1}", st.Stack, st.Tray); // tada - zero based
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Stack and Tray属性构建1,但我认为这违反了最不惊讶的原则.C#是一种基于0的语言,而不是基于1的语言.
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |