簡體   English   中英

如何根據 C# 中的枚舉值獲得優勢?

[英]How do I get an advantage depending on enum value in C#?

我正在嘗試制作一個石頭剪刀布游戲,用一個枚舉來表示播放器或計算機播放的每個值:

public enum Choice
{
    Rock,
    Paper,
    Scissors
}

我想根據選擇獲得優勢,但我不知道如何在 C# 中做到這一點,因為我習慣了 Java,它使枚舉類可以修改以在其中創建函數。 基本上,我想獲得當前有優勢的選擇。 (例如,Paper 優於 Rock,Scissors 優於 Paper,Rock 優於 Scissors)

我建議直接在您的Choice枚舉下使用擴展方法,如下所示:

public enum Choice
{
  Rock,
  Paper,
  Scissors
}

public static class ChoiceExt
{
    public static Choice GetAdvantageByChoice(this Choice choice)
    {
        switch (choice)
        {
            case Choice.Rock:
                return Choice.Scissors;
            case Choice.Paper:
                return Choice.Rock;
            case Choice.Scissors:
                return Choice.Paper;
            default:
                throw new ArgumentException()
        }
    }
}

在擴展方法GetAdvantageByChoice ,第一個參數的類型將是擴展的類型,這就是為什么我們必須在它前面添加this修飾符。

另外,正如 Jeroen Mostert 所說,您可以更簡潔地編寫switch

public static Choice GetAdvantageByChoice(this Choice choice) =>
  choice switch
  {
      Choice.Paper => Choice.Rock,
      Choice.Rock => Choice.Scissors,
      Choice.Scissors => Choice.Paper,
      _ => throw new ArgumentException()
  };

一個更簡單優雅的解決方案,使用C#8 switch表達式

var choice = Choice.Paper; //for example
var result = choice switch
{
    Choice.Paper => Choice.Rock,
    Choice.Rock => Choice.Scissors,
    Choice.Scissors => Choice.Paper,
    _ => throw new ArgumentOutOfRangeException()
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM