C# 索引器:设置变量的值

本文关键字:变量 设置 索引 | 更新日期: 2023-09-27 18:21:21

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"。我想问的是,传递给索引器的值是否需要与索引器的返回类型相同?如果没有,请指导我到底做错了什么。-谢谢

C# 索引器:设置变量的值

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

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

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

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

这样根本不需要转换。除非您确实需要转化,否则值得避免转化。

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

value将是

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

简单的解决方案是执行以下操作:

rollNo = int.Parse(value);