2013-07-08 22 views
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”。我想问的是,传递给索引器的值是否需要与索引器的返回类型相同?如果没有,请指导我做错了什么。 - 感谢C#索引器:设置一个变量的值

+1

索引器必须是整数类型,而不是返回类型 – wudzik

+0

对不起!无法得到你的观点。你能更清楚一点吗? –

+0

@wudzik: - [C#的索引现实世界中的用例?]>(http://stackoverflow.com/questions/2185071/real-world-use-cases-for-c-sharp-indexers不一定..看到这个) – Paritosh

回答

8

是否传递到索引值必须是相同的索引的返回类型?

是的,它的定义是......就像属性设置器中value的类型也是属性的类型一样。您不能拥有一个索引器或属性,它具有一种类型的设置和一种不同类型的索引器或属性。在你的情况下,你不会想要的,因为那么你将无法设置name ...

目前尚不清楚为什么你试图使用索引器为此。使用两个属性会更加清晰:

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

这样,根本不需要转换。除非你真的需要他们,否则值得避免转换。

(另外,您的领域已经是公开的,这也是一个坏主意...领域是一个实现细节应该通常是隐藏的。请注意,上述自动实现的属性意味着你甚至不会需要明确声明字段。)

6

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

简单的解决办法是要做到:

rollNo = int.Parse(value); 
+0

你的意思是,传递的值总是一个字符串? –

+1

是的。如果你的属性被定义为'public string foo ...',那么setter中'value'的类型总是'string'。 – rossipedia

+0

感谢您添加详细信息:) –