【问题标题】:Implementing indexing in C# property在 C# 属性中实现索引
【发布时间】:2015-11-09 11:16:14
【问题描述】:

对于我一直在阅读的内容,使用另一个类,我将能够将索引添加到属性中。但我无法实现自定义“投票”类的“选项 [x]”属性的获取/设置。

public class Poll
{
    //Constructor
    public Poll() { }
    //Properties
    public string Title
    {
        get { return title; }
        set { title = value; }
    }
    public Options Option { get; set; }
    private string title;
}
public class Options
{
    string[] option = { };
    public string this[int i]
    {
        get { return option[i]; }
        set { option[i] = value; }
    }
}

当我尝试将第一个选项添加到投票时,它说对象(“选项”)尚未被实例化。这确实是有道理的。但我不知道在 Poll 中我会在哪里实例化它。

那么,谁能解释一下我做错了什么?我是否遵循正确的方向?或指向我进一步阅读。对于我所看到的解决方案,这个对我来说似乎是最合乎逻辑的,但只是一个小的原始示例,细节很少。

我不想按照字典 (Implementing indexing "operator" in on a class in C#) 的方式,或者“选项”属性返回字符串列表。

【问题讨论】:

  • 你的构造函数应该初始化属性。
  • 即使您将Option 设置为Options 的实例,索引器也将始终抛出IndexOutOfRangeException,因为option 数组始终是一个空数组。
  • public Poll() { Option = new Options()}
  • 感谢您快速简洁的回答。三个 cmets 都是正确的。问题已经解决了。这个问题我现在该怎么办?

标签: c# indexing


【解决方案1】:

变化:

public Poll() { }

收件人:

public Poll() { Option = new Options(); }

还要注意“Wai Ha Lee”指出:“索引器总是会抛出一个IndexOutOfRangeException,因为选项数组总是一个空数组。”

他的意思是你必须替换:

string[] option = { };

与:

string[] option = new string[X]; //X is Array size

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-01-24
    • 2014-05-29
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多