1
public string name;
public int rollNo;

public string this[int i] 
{
    get 
    {
        switch(i)
        {
            case 0:
                return name;

            case 1:
                return rollNo.ToString();

            default:
                return "";
        }
    }
    set
    {
        switch (i)
        {
            case 0:
                name = value;
                break;
            case 1:
                rollNo = value;
                break;
        }
    }
}

以上是我尝试执行的代码,但问题是rollNo = value显示此问题“无法从字符串转换为 int”。我想问的是,传递给索引器的值是否需要与索引器的返回类型相同?如果不是,请指导我到底做错了什么。-谢谢

4

2 回答 2

8

传递给索引器的值是否需要与索引器的返回类型相同?

是的,根据定义......就像value属性设置器中的类型也与属性相同。您不能有一个索引器或属性具有一种用于设置的类型和另一种用于获取的类型。在您的情况下,您无论如何都不想这样做,因为那样您将无法设置name...

目前尚不清楚您为什么要尝试为此使用索引器。只使用两个属性会更清楚:

public string Name { get; set; }
public int RollNumber { get; set; }

这样就完全不需要转换了。除非你真的需要它们,否则避免转换是值得的。

(此外,您的字段已经是公共的,这也是一个坏主意......字段是一个通常应该隐藏的实现细节。请注意,上面自动实现的属性意味着您甚至不需要显式声明字段。)

于 2013-07-08T06:11:27.390 回答
6

value在您的情况下,将是属性的类型string

简单的解决方案是:

rollNo = int.Parse(value);
于 2013-07-08T06:10:08.017 回答