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”。我想问的是,传递给索引器的值是否需要与索引器的返回类型相同?如果没有,请指导我到底做错了什么。
-Thanks
答案 0 :(得分:8)
传递给索引器的值是否需要与索引器的返回类型相同?
是的,根据定义......就像属性设置器中value
的类型也是属性一样。您不能拥有一个索引器或属性,它有一种类型可供设置,另一种类型可供获取。在你的情况下,你不会想要那样,因为那时你将无法设置name
......
目前还不清楚为什么要尝试使用索引器。使用两个属性会更清楚:
public string Name { get; set; }
public int RollNumber { get; set; }
这样就根本不需要转换。除非你真的需要它们,否则值得避免转换。
(此外,您的字段已经公开,这也是一个坏主意......字段是一个实现细节,通常应该隐藏。请注意,上面自动实现的属性意味着您甚至不需要显式声明字段。)
答案 1 :(得分:6)
value
将成为该属性的类型,在您的情况下为string
。
简单的解决方案是:
rollNo = int.Parse(value);