当我尝试使用结构时,我在 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);
}
这是我得到的错误
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);
}