【发布时间】:2016-02-03 18:42:34
【问题描述】:
我有很多将ref/out 作为参数的方法。我这样做是因为我在创建方法的类中声明了我的变量。现在我将变量移到单独的类中,我无法正确地将变量作为 ref/out 参数传递。那么我应该怎么做呢?这些方法需要很多参数,并且在某些时候都需要它们。所以也许返回一个元组是解决方案,但我听说返回一个包含很多变量的元组根本不好(我不确定这是否适用于 .net 4.5 框架)。我将在这里只发布其中的一些方法,因为其中有超过 25 个。
private void SetPlayers(int start, int end, Panel panel, int chips, int turn, ref bool check, int newHorizontal, int newVertical, AnchorStyles one, AnchorStyles two)
{
if (chips > 0)
{
foldedPlayers--;
if (turn < start || turn > end) return;
if (Holder[start].Tag != null)
{
Holder[end].Tag = Reserve[end];
}
Holder[start].Tag = Reserve[start];
if (!check)
{
horizontal = newHorizontal;
vertical = newVertical;
}
check = true;
Holder[turn].Anchor = (one | two);
Holder[turn].Image = backImage;
//Holder[turn].Image = Deck[i];
Holder[turn].Location = new Point(horizontal, vertical);
horizontal += Holder[turn].Width;
Holder[turn].Visible = true;
Controls.Add(panel);
panel.Location = new Point(Holder[start].Left - 10, Holder[start].Top - 10);
panel.BackColor = Color.DarkBlue;
panel.Height = _settings.Height + 20;
panel.Width = (_settings.Width + 10) * 2;
panel.Visible = false;
if (i == end)
{
check = false;
}
}
}
我认为这实际上可能是用元组完成的:
private void Combinations(int c1, int c2, ref int current, ref int power, Control lFold)
{
for (i = 0; i < 16; i++)
{
if (Reserve[i] == int.Parse(Holder[c1].Tag.ToString()) &&
Reserve[i + 1] == int.Parse(Holder[c2].Tag.ToString()))
{
RHighCard(ref current, ref power);
RPairFromTable(ref current, ref power);
RPairInHand(ref current, ref power);
RPairFromHand(ref current, ref power);
RTwoPairFromTable(ref current, ref power);
RHandTableTwoPair(ref current, ref power);
RTableHandTwoPair(ref current, ref power);
RTwoPair(ref current, ref power);
RThreeOfAKind(ref current, ref power, straight);
RStraight(ref current, ref power, straight);
RFlush(ref current, ref power, straight1);
RFullHouse(ref current, ref power, ref done, straight);
RFourOfAKind(ref current, ref power, straight);
RStraightFlush(ref current, ref power, st1, st2, st3, st4);
}
}
}
我将只发布其中的一些方法。它们都以相同的方式改变功率和电流:
private void RHighCard(ref int current, ref int power)
{
if (current != -1) return;
current = -1;
power = Kicker;
Win.Add(new Type { Power = power, Current = current });
}
private void RPairFromTable(ref int current, ref int power)
{
if (current != -1) return;
for (int tc = 16; tc >= 12; tc--)
{
int max = tc - 12;
for (int k = 1; k <= max; k++)
{
if (tc - k < 12)
{
max--;
}
if (tc - k < 12) continue;
if (Reserve[tc] / 4 == Reserve[tc - k] / 4 && Reserve[tc] / 4 == 0)
{
current = 0;
power = 13 + Kicker;
Win.Add(new Type { Power = power, Current = current });
}
else if (Reserve[tc] / 4 == Reserve[tc - k] / 4 && Reserve[tc] / 4 != 0)
{
current = 0;
power = Reserve[tc] / 4 + Kicker;
Win.Add(new Type { Power = power, Current = current });
}
}
}
}
再次,我必须将类属性作为输入传递给这些方法,并且它不会返回编辑的值,这是主要问题。欢迎任何替代方案。
还有一些关于我的类变量的信息:
public class UsersProperties
{
public int Chips;
public int Type;
public int Power;
public bool Turn;
public bool FoldTurn;
public AnchorStyles CardsAnchor;
public readonly Panel Panel = new Panel();
}
public class Player : UsersProperties
{
public Player()
{
Chips = 100000;
Type = -1;
Power = 0;
Turn = true;
FoldTurn = false;
CardsAnchor = AnchorStyles.Bottom;
}
}
【问题讨论】:
标签: c# class properties tuples ref