我可以在C#中使用GET和SET来获取和设置一个数组吗?

4
HOMEWORK QUESTION: 我需要创建一个简单的问答游戏,从CSV文件中读取数据。我的某个问题的数据结构如下:"问题;答案A;答案B;答案C;答案D;正确答案字母"。
我们使用一系列的getter和setter来保存单个问题对象的所有相关数据,我在使用我已经创建的用于保存四个答案的数组时遇到了一个问题。
在我的构造函数中,我使用了以下代码——我相信这将实例化问题中的答案数组:
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[]"的错误。
希望我发布的足够的代码可以帮助有经验的人指点方向。我感觉我错过了一些显而易见的东西,但我无法使其正常工作。

1
get { return m_Answers; } 应该可以工作。 - Bit
7
赞同表明这是一道作业问题并在寻求帮助之前尝试了一些工作的做法! - Kevin
m_Answers已经是一个数组了,在返回语句中不需要再将其转换为数组。 - NWard
5
你的代码存在一些问题,这是可以理解的,但我建议你一个问题一个问题地去解决。最好选择一个编译时错误,把其他有问题的代码注释掉,然后让这个部分能够编译通过。接着再处理下一个问题,以此类推。这样做有助于你从整体上审视问题,而不是只看到细节。 - Jon Skeet
@NWard,这不是转换类型问题,他是在尝试访问一个索引却没有提供索引! - Filip Ekberg
1个回答

3
您的代码存在错误,将导致编译错误,所以我的第一课将是:听取编译器的建议。有些错误可能有时会有些难以理解,但我可以保证,很多其他人之前也曾遇到过相同的问题;在谷歌中搜索编译器错误消息经常会给你提供类似于您问题的其他人的示例。
您说“在我的构造函数中”,但问题在于您的代码没有构造函数。不过,您确实初始化了类的字段和属性,编译器会为您创建一个默认的构造函数,但您自己没有定义。我并不是说您的代码因为没有构造函数就不能工作,但您可能使用了错误的术语。
第一个问题出现在TriviaQuestionUnit的第一个代码片段中。您的前两行是正确的,您正在创建一个具有值4的常量整数,用于确定您的数组大小,然后您使用该数字初始化该数组。
当您执行new string[NUM_ANSWERS]时,这将创建一个数组,其中包含默认(空)值
您代码中第一个问题出现在getter和setter方法上。该属性期望您返回一个字符串数组,事实上方法签名也告诉我们这一点: public string[] Answer 然而,看一下getter和setter,您返回的是什么? m_Answers 是对数组的“引用”,因此每当您写m_Answers时,都在引用该数组。那么我们添加方括号会发生什么?
在变量名后添加[]表示我们要从数组中检索一个值。这称为索引器,我们向其提供我们要从数组中检索值的索引(第一个值从索引0开始)。但是,您没有向其提供值?那么返回的是什么?
听取编译器的建议! 索引器有1个参数,但使用了0个参数进行调用 这告诉您什么?它告诉您它不期望空的[],但是它希望您提供索引器的数字,例如0,像这样:[0]。但是,在这里这样做的问题是,这将与方法签名不匹配。
那么我们想要什么呢?
我们只想返回我们创建的数组,因此只需删除[]并直接返回m_Answers,如下所示:
public string[] Answer
{
    get { return m_Answers; }
    set { m_Answers = value; }
}

请注意,您在set结尾处还缺少一个右大括号。

在修复此问题时,可能会出现更多代码问题,但请相信编译器并尽力听从它!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接