2010-09-04 1 views
0

這個程序有錯誤,任何人都可以解決這個問題?c中的索引器程序#

class TempRecord 
{ 
    // Array of temperature values 
    private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 
             61.3F, 65.9F, 62.1F, 59.2F, 57.5F }; 
    private int[] d= new int[10]{4,5,5,4,4,43,2,2,5,3}; 
    // To enable client code to validate input 
    // when accessing your indexer. 
    //public int Length 
    //{ 
    // get { return temps.Length; } 
    //} 
    // Indexer declaration. 
    // If index is out of range, the temps array will throw the exception. 
    public float this[int index] 
    { 
     get 
     { 
      return temps[index]; 
     } 

     set 
     { 
      temps[index] = value; 
     } 
    } 
    public int this[int index] 
    { 
     get 
     { 
      return d[index]; 
     } 

     set 
     { 
      d[index] = value; 
     } 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     TempRecord tempRecord = new TempRecord(); 
     // Use the indexer's set accessor 
     tempRecord[3] = 58.3F; 
     tempRecord[5] = 60.1F; 



     // Use the indexer's get accessor 
     for (int i = 0; i < 10; i++) 
     { 
      System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]); 
     } 
     Console.WriteLine(tempRecord[2]); 
     // Keep the console window open in debug mode. 
     System.Console.WriteLine("Press any key to exit."); 
     System.Console.ReadKey(); 

    } 
} 
+7

不要只是說有錯誤。告訴我們它在哪裏以及錯誤是什麼。 – GenericTypeTea 2010-09-04 11:53:29

+4

SO上有答案。你能找到他們嗎? – StuartLC 2010-09-04 11:55:13

+1

我們可以解決它,但你怎麼樣,因爲這是你的問題不是我們的?你的[其他問題](http://stackoverflow.com/questions/3641695/getters-and-setters-in-c-closed)暗示了一種不受歡迎的態度。這是一種尋求他人工作而不表現出任何動機和個人暗示的人的態度。所以除非這種態度改變,否則你的問題可能會被社區所關閉。 – 2010-09-04 12:07:15

回答

1

類型 'ConsoleApplication1.TempRecord' 已經定義了一個名爲 '本' 具有相同的參數類型成員

那是你的錯誤?

如果是 - 閱讀它說的=)您有兩個this成員,也稱爲Indexers,具有相同的方法簽名。具體來說:

public float this[int index] 
public int this[int index] 

請記住,對於消歧,不考慮返回類型。您需要刪除一個Completley或將其更改爲一個方法,而不是索引器。

試想一下,如果它允許你有下面的代碼:

var record = new TempRecord(); 
object value = record[3]; 

哪些索引應該在這裏叫什麼名字?返回float的那個或返回int的那個。是的,這個例子是人爲設計的,但從語言設計和編譯器實現的角度來看,它是完全有效的,因此你不能通過返回類型重載。

1

由於GenericTypeTea說,說你有一些錯誤是太模糊,以期望任何形式的綜合反應。然而,馬上我可以告訴你,你試圖僅僅基於返回類型來重載索引器屬性,這在C#中是不可能的(或者我知道的任何多態語言)。另外,同時提供數組大小和初始化程序列表同時要求維護頭疼。此代碼編譯是因爲初始化程序列表中元素的數量和大小匹配,但如果您更改一個而忘記更改另一個,則會開始出現編譯器錯誤。就個人而言,如果您使用的是初始化程序列表,我會建議使用空括號,但是我認爲可以根據個人喜好進行劃分。