当我尝试使用结构时,我在 c# 中不理解的错误

Error I don't understand in c# when I try to use a struct

这是我得到的错误

Error 1 'System.Array' does not contain a definition for 'guess_word' and no extension method 'guess_word' accepting a first argument of type 'System.Array' could be found (are you missing a using directive or an assembly reference?) C:\Hangman\Jers Hangman Game\Jers Hangman Game\Form1.cs 183 25 Jers Hangman Game

这是我的一些代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Jers_Hangman_Game
{

public partial class Form1 : Form
{
    int rndNum = 0;
    int wordLength = 0;
    int numGuesses = 0;
    String tempWordLength = "";
    String astericks = "";
    int indexOfGuess;



    public struct Hangman_words
    {
        public int no_letters;
        public string guess_word, hint;
    }

    public Hangman_words[] myWords = new Hangman_words[19];

    public Form1()
    {
        InitializeComponent();
    }

    public void Form1_Load(object sender, EventArgs e)
    {

        myWords[0].no_letters = 5;
        myWords[0].guess_word = "earth";
        myWords[0].hint = "We live on it";

        myWords[1].no_letters = 6;
        myWords[1].guess_word = "garage";
        myWords[1].hint = "store car in it";

        myWords[2].no_letters = 11;
        myWords[2].guess_word = "grandmother";
        myWords[2].hint = "your mothers mother";

        myWords[3].no_letters = 7;
        myWords[3].guess_word = "january";
        myWords[3].hint = "The first month of the year";

        myWords[4].no_letters = 6;
        myWords[4].guess_word = "monkey";
        myWords[4].hint = "Swings from a tree";

        myWords[5].no_letters = 9;
        myWords[5].guess_word = "policeman";
        myWords[5].hint = "called a guard in ireland";

        myWords[6].no_letters = 6;
        myWords[6].guess_word = "recall";
        myWords[6].hint = "to remember";

        myWords[7].no_letters = 3;
        myWords[7].guess_word = "toy";
        myWords[7].hint = "something a child plays with";

        myWords[8].no_letters = 7;
        myWords[8].guess_word = "tobacco";
        myWords[8].hint = "smoking it gives you cancer";

        myWords[9].no_letters = 5;
        myWords[9].guess_word = "thumb";
        myWords[9].hint = "you have one on each hand";

        myWords[10].no_letters = 5;
        myWords[10].guess_word = "stiff";
        myWords[10].hint = "hard to bend";

        myWords[11].no_letters = 8;
        myWords[11].guess_word = "simplest";
        myWords[11].hint = "the most simple";

        myWords[12].no_letters = 5;
        myWords[12].guess_word = "shout";
        myWords[12].hint = "to speak very loudy";

        myWords[13].no_letters = 9;
        myWords[13].guess_word = "selection";
        myWords[13].hint = "making a choice";

        myWords[14].no_letters = 6;
        myWords[14].guess_word = "scared";
        myWords[14].hint = "To be afraid";

        myWords[15].no_letters = 6;
        myWords[15].guess_word = "palace";
        myWords[15].hint = "Where a price lives";

        myWords[16].no_letters = 5;
        myWords[16].guess_word = "adult";
        myWords[16].hint = "One who is legally allowed to vote/drink";

        myWords[17].no_letters = 11;
        myWords[17].guess_word = "explanation";
        myWords[17].hint = "a good answer";

        myWords[18].no_letters = 4;
        myWords[18].guess_word = "calm";
        myWords[18].hint = "To be at ease";

        myWords[19].no_letters = 4;
        myWords[19].guess_word = "kids";
        myWords[19].hint = "children";


    }

    private void button1_Click(object sender, EventArgs e)
    {
        wordHint.Text = myWords[randomNumGenerator()].hint;
        tempWordLength = myWords[randomNumGenerator()].guess_word;
        wordLength = tempWordLength.Length;
        astericksBox.Text = asterickGenerator(tempWordLength);
        astericks = "";
        guesses.Text = numGuesses.ToString();
    }



    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void label2_Click(object sender, EventArgs e)
    {

    }

    private void wordHint_TextChanged(object sender, EventArgs e)
    {

    }

    private void ResetWord_Click(object sender, EventArgs e)
    {
        wordHint.Clear();
        astericksBox.Clear();
        wordHint.Text = myWords[randomNumGenerator()].hint;
        tempWordLength = myWords[randomNumGenerator()].guess_word;
        wordLength = tempWordLength.Length;
        astericksBox.Text = asterickGenerator(tempWordLength);
        astericks = "";
    }

    private int randomNumGenerator() {
        // random number generator
        Random randomNum = new Random();
        rndNum = randomNum.Next(0,19);
        return rndNum;
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {


    }

    private String asterickGenerator(String guess) {
        for (int i = 0; i < wordLength; i++) {
            astericks += "*";
        }
        return astericks;
    }

    private void charGuess( char letter ) {
        if (myWords.guess_word.Contains(letter)) {
        numGuesses+=1   

        }

    }

错误在最后一个方法charGuess中。

您没有在最后一个方法中使用索引器,因此您试图(如消息所述)在数组本身而不是数组成员上调用该方法。

myWords[0].guess_word 正在访问数组中第 0 个元素的 guess_word 字段。 myWords.guess_word 正在尝试访问数组本身不存在的 guess_word 字段。

编辑: 除了@Peyman 指出的错误,并扩展@pm100 评论,您需要 select 您猜测的单词并将其存储为一个字段。 在您的方法 button1_Click 中,您 select 从数组中输入一个词,但不存储它。 另外,因为你两次调用 randomNumGenerator(),你的提示和字长很可能来自数组中的不同元素。

进一步编辑: 如果允许我的话... 创建一个 select 单词的方法并调用它,而不是在 2 个事件处理程序中重复类似的工作。

private void SelectNewWord()
{
    wordHint.Clear();
    astericksBox.Clear();
    // word = new field of type Hangman_words in class.
    // random = new static field of type Random in class.
    word = myWords[random.Next(0, myWords.Length)];
    wordHint.Text = word.hint;
    astericksBox.Text = new string('*', word.quess_word.Length);
}