gpt4 book ai didi

c# - 我可以在 C# 中获取和设置数组吗?

转载 作者:行者123 更新时间:2023-11-30 12:09:49 24 4
gpt4 key购买 nike

家庭作业问题:我需要创建一个从 CSV 文件读取的简单问答游戏。我针对特定问题的数据结构如下:“Question;AnswerA;AnswerB;AnswerC;AnswerD;CorrectAnswerLetter”。

我们正在使用一系列 getter 和 setter 来保存单个问题对象的所有相关数据,而我为保存四个答案而创建的数组遇到了问题。

在我的构造函数中,我正在使用这段代码——我相信它实例化了有问题的 Answer 数组:

class TriviaQuestionUnit
{
...

const int NUM_ANSWERS = 4;
string[] m_Answers = new String[NUM_ANSWERS];

public string[] Answer
{
get { return m_Answers[]; }
set { m_Answers = value[];
}

...

// Answer array
public string[] GETAnswer(int index)
{
return m_Questions[index].Answer;
}

...
}

我正在从我的 TriviaQuestionBank 方法访问 getter 和 setter,其中包括以下代码:

...

const int NUM_QUESTIONS = 15;
TriviaQuestionUnit[] m_Questions = new TriviaQuestionUnit[NUM_QUESTIONS];

...

// Answer array
public string[] GETAnswer(int index)
{
return m_Questions[index].Answer;
}

...

我正在使用 StreamReader 从我的文件中读取一行输入

...

char delim = ';';
String[] inputValues = inputText.Split(delim);

...

解析我从中创建问题数据的数组中的输入。对于我的四个答案,inputValues 数组中的索引 1 到 4,我用四个答案填充了这个问题的数组。

...

for (int i = 0; i < NUM_ANSWERS; i++)
{
m_Questions[questionCounter].Answer[i] = inputValues[i + 1];
}

...

我在构造函数中的 getter/setter 上遇到了Syntax code, value expected 错误,如果我将变量更改为 m_Answers[NUM_QUESTIONS],我会得到我无法将字符串隐式转换为 String[] 的错误。

希望我已经发布了足够多的代码供他人帮助指明正确的方向。我觉得我遗漏了一些明显的东西,但我就是做不到。

最佳答案

你的代码有一些错误会导致编译错误,所以我给你的第一课是:听编译器。有些错误有时看起来有点难以理解,但我可以向你保证,很多其他人以前也遇到过同样的问题;谷歌搜索编译器错误通常会为您提供与您的问题类似的其他人的示例。

你说“在我的构造函数中”,但问题是你的代码没有构造函数。然而,你确实在你的类上初始化了字段和属性,当然,编译器会为你创建一个默认构造函数,但你自己还没有定义。我并不是说您的代码不起作用是因为您没有构造函数,但您可能使用了错误的术语。

第一个问题出现在 TriviaQuestionUnit 中的第一个代码片段中。您的前两行工作正常,您正在创建一个值为 4 的常量整数,用于确定数组的大小,然后使用给定的数字初始化数组。

当您执行 new string[NUM_ANSWERS] 时,这将创建一个数组,具有默认(空)值

代码中出现的第一个问题是 getter 和 setter。该属性希望您返回一个字符串数组,方法签名实际上告诉我们:

public string[] Answer

但是,看看 getter 和 setter,你返回的是什么?

m_Answers 是对数组的“引用”,因此每当您编写 m_Answers 时,您都是在引用该数组。那么当我们添加方括号时会发生什么?

在数组的变量名后添加[] 表示我们要从数组中检索一个值。这称为索引器,我们为其提供一个索引,该索引指示我们要从数组中检索值的位置(第一个值从索引 0 开始)。但是,您不为其提供值(value)吗?那么返回的是什么?

听编译器!

Indexer 有 1 个参数但用 (0) 个参数调用

这告诉你什么?它告诉您它不需要空的 [],但它希望您为索引器提供一个数字,例如 0,如下所示:[0]。但是,在这里这样做的问题在于,这将与方法签名不匹配。

那么我们想要的是什么?

我们只是想返回我们创建的数组,所以只需删除 [] 并像这样直接返回 m_Answers:

public string[] Answer
{
get { return m_Answers; }
set { m_Answers = value; }
}

请注意,如果 set,您还缺少末尾的大括号。

修复此问题时,您的代码中可能会出现更多问题,但请相信编译器并尝试听取它的意见!

关于c# - 我可以在 C# 中获取和设置数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com