C#Indexers:设置变量的值

Kam*_*med 1 c#

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 8

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

是的,根据定义......就像value属性设置器中的类型也是属性的类型一样.您不能拥有一个索引器或属性,它有一种类型可供设置,另一种类型可供获取.在你的情况下,你不会想要那样,因为那时你将无法设置name......

目前还不清楚你为什么要尝试使用索引器.使用两个属性会更清楚:

public string Name { get; set; }
public int RollNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)

这样就根本不需要转换.除非你确实需要转换,否则值得避免转换.

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


ros*_*dia 6

value在你的情况下,将成为财产的类型string.

简单的解决方案是:

rollNo = int.Parse(value);
Run Code Online (Sandbox Code Playgroud)