您好,如何使if语句更有效?基本上我想做的是检查扑克中的“手”是否“直”我想检查玩家是否有“直”,“同花顺”和以上。例如:如果游戏手牌是同花顺的,我不需要检查是否笔直,只需检查“同花顺”及以上即可。
public enum HandType
{
Single = 1,
Pair = 2,
Triple = 3,
Straight = 4,
Flush = 5,
FullHouse = 6,
FourOfAKind = 7,
StraightFlush = 8,
}
public List<CardData> GetBotHands(List<CardData> gameHand)
{
List<CardData> playerHand = new List<CardData>();
HandType handType = HandEvaluator.EvaluateHand(gameHand);
if(handType < HandType.Straight)
{
return null;
}
if(handType == HandType.Straight)
{
playerHand = GetStraight(gameHand);
if(playerHand != null)
{
return playerHand;
}
playerHand = GetFlush(gameHand);
if (playerHand != null)
{
return playerHand;
}
playerHand = GetFullHouse(gameHand);
if (playerHand != null)
{
return playerHand;
}
playerHand = GetFourKind(gameHand);
if (playerHand != null)
{
return playerHand;
}
playerHand = GetStraightFlush(gameHand);
if (playerHand != null)
{
return playerHand;
}
}
else if(handType == HandType.Flush)
{
playerHand = GetFlush(gameHand);
if (playerHand != null)
{
return playerHand;
}
playerHand = GetFullHouse(gameHand);
if (playerHand != null)
{
return playerHand;
}
playerHand = GetFourKind(gameHand);
if (playerHand != null)
{
return playerHand;
}
playerHand = GetStraightFlush(gameHand);
if (playerHand != null)
{
return playerHand;
}
}
else if(handType == HandType.FullHouse)
...
return null;
}通过遵循@Shiran Dror的解决方案,现在我有了以下代码。但是有没有办法让它变得更短呢?
if(handType == HandType.Straight)
{
return GetStraight(gameHand) ?? GetFlush(gameHand) ?? GetFullHouse(gameHand) ?? GetFourKind(gameHand) ?? GetStraightFlush(gameHand);
}
else if(handType == HandType.Flush)
{
return GetFlush(gameHand) ?? GetFullHouse(gameHand) ?? GetFourKind(gameHand) ?? GetStraightFlush(gameHand);
}
else if(handType == HandType.FullHouse)
...发布于 2016-04-17 20:56:58
你可以使用??如下所示:
return GetStraight(gameHand) ?? GetFlush(gameHand) ... ?? GetStraightFlush(gameHand);它将返回第一个none空值
编辑-让它更短
switch (handType) {
case HandType.Straight:
return GetStraight(gameHand) ?? GetFlush(gameHand) ... ?? GetStraightFlush(gameHand);
case HandType.Flush:
return GetStraight(gameHand) ?? GetFlush(gameHand) ... ?? GetStraightFlush(gameHand);
...
default:
return null;
}此外,如果您一次又一次地调用同一个函数,您可以添加一个新函数,这样就不会重复代码。示例:
private HandType RepetitiveCheck(gameHand)
{
return GetFlush(gameHand) ?? GetFullHouse(gameHand) ?? GetFourKind(gameHand) ?? GetStraightFlush(gameHand)
}在main函数中,像这样使用它
switch (handType) {
case HandType.Straight:
return GetStraight(gameHand) ?? RepetitiveCheck(gameHand);
case HandType.Flush:
return RepetitiveCheck(gameHand);
...
default:
return null;
}https://stackoverflow.com/questions/36676749
复制相似问题