2014-05-22 75 views
0

下面是與通用索引C#泛型索引不會返回一個字符串

public class IndexThis<T> 
{ 
    T[] MainArr = new T[100]; 

    public IndexThis(params T[] Arrz) 
    { 
     for (int i = 0; i < Arrz.Length; i++) 
     { 
      MainArr[i] = Arrz[i]; 
     } 
    } 

    public T this[int index] 
    { 
     get 
     { 
      if (MainArr[index] == null) return "myStringHere"; //compile error 
      return MainArr[index]; 
     } 

     private set { } 
    } 
} 

試圖將它轉換爲(T)或使用「作爲T」還是給我的編譯時錯誤的類,它似乎我能真的不記得我在這裏丟失了什麼

+0

什麼編譯錯誤? –

+3

沒有保證將'string'轉換爲'T' – Neverever

回答

4

T,因爲它目前不受約束,可以是任何東西。索引器需要返回T,並且調用代碼將預計類型爲T的實例。

比方說,您使用的類型......

​​

你的索引現在基本上是:

public Giraffe this[int index] 
{ 
    get 
    { 
     if (MainArr[index] == null) return "myStringHere"; //compile error 
     return MainArr[index]; 
    } 
} 

這當然是沒有意義的。

如果您需要返回值,請考慮返回default(T)。或者,拋出一個異常。

+0

好吧,因爲我已經覺得自己已經足夠愚蠢,我會繼續問你最好的方式去做我實際上在想什麼,而不是使用T作爲一個返回類型改變它的對象會取得訣竅?或者,可能最好的方法是在if語句之後調用一個方法,在控制檯上寫入假定的字符串? – user257824

+1

不需要感到愚蠢。最好的方法取決於你想要做什麼。如果你只是想要診斷信息,拋出一個異常或記錄值(控制檯很好),無論工作。是的,你*可以*返回一個對象,但是那個調用者會用這個信息做什麼?他們需要檢查您返回的有用值的類型。 –

+0

本來是作爲一個對象工作的,因爲我僅僅是爲了學習目的而在console.writeline上調用索引器。不管怎麼說,還是要謝謝你! – user257824

相關問題