C#中能否将类实例存入数组及如何随机选取实例?
解决Hangman游戏随机选单词实例的问题
嘿,我来帮你搞定这个问题!你完全可以把WordToGuess类的实例直接存入数组或者列表里,这才是最直接也最符合你练习初衷的方式——之前用字符串ID映射的思路确实绕了弯路,还容易出错。
方法一:用数组存储实例(最直接)
你只需要把创建好的WordToGuess实例直接放进数组,然后用随机索引选取就行,代码示例如下:
// 先创建几个WordToGuess实例 WordToGuess duck = new WordToGuess(); duck.numberOfLetters = 4; duck.theWord = "Duck"; duck.theLetters = new string[] { "d", "u", "c", "k" }; duck.difficulty = "easy"; duck.wordID = "e3"; WordToGuess cat = new WordToGuess(); cat.numberOfLetters = 3; cat.theWord = "Cat"; cat.theLetters = new string[] { "c", "a", "t" }; cat.difficulty = "easy"; cat.wordID = "e1"; // 把实例存入数组 WordToGuess[] easyWords = new WordToGuess[] { duck, cat /* 这里继续加其他easy难度的实例 */ }; // 随机选取一个实例 Random rnd = new Random(); int randomIndex = rnd.Next(easyWords.Length); WordToGuess selectedWord = easyWords[randomIndex];
这样你拿到的selectedWord就是随机选中的那个单词实例,直接用它的属性就行,不用再通过ID去匹配啦。
方法二:用List存储实例(更优雅灵活)
如果后续你可能需要动态添加/移除单词,用List<WordToGuess>会比数组更方便,而且初始化的时候可以用集合初始化器让代码更整洁:
// 直接用集合初始化器创建并填充List List<WordToGuess> easyWordsList = new List<WordToGuess> { new WordToGuess { numberOfLetters = 4, theWord = "Duck", theLetters = new string[] { "d", "u", "c", "k" }, difficulty = "easy", wordID = "e3" }, new WordToGuess { numberOfLetters = 3, theWord = "Cat", theLetters = new string[] { "c", "a", "t" }, difficulty = "easy", wordID = "e1" } // 继续添加更多实例即可 }; // 随机选取 Random rnd = new Random(); WordToGuess selectedWord = easyWordsList[rnd.Next(easyWordsList.Count)];
进阶优化:给WordToGuess加构造函数
为了让创建实例的代码更简洁,你可以给WordToGuess类加一个带参数的构造函数,这样就不用逐个赋值属性了:
public class WordToGuess { public int numberOfLetters { get; set; } public string theWord { get; set; } public string[] theLetters { get; set; } public string difficulty { get; set; } public string wordID { get; set; } // 带参数的构造函数 public WordToGuess(int letterCount, string word, string[] letters, string diff, string id) { numberOfLetters = letterCount; theWord = word; theLetters = letters; difficulty = diff; wordID = id; } }
之后创建实例就可以写成这样,清爽多了:
List<WordToGuess> easyWordsList = new List<WordToGuess> { new WordToGuess(4, "Duck", new string[] {"d","u","c","k"}, "easy", "e3"), new WordToGuess(3, "Cat", new string[] {"c","a","t"}, "easy", "e1") };
这种直接操作类实例的方式,既符合面向对象的编程思路,也避免了手动维护ID和实例映射的麻烦,完全贴合你练习C#的初衷哦!
内容的提问来源于stack exchange,提问作者scroll.mops
相关产品推荐
相关产品推荐

