2013-07-08 56 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

感謝您添加詳細信息:) –