2011-04-29 74 views
3

我正在上課,所以我可以欺騙掃雷,目前正在建立一些仿製藥......但我有點卡住了。我想返回一個int,但我該如何轉換它?泛型問題

public T ReadMemory<T>(uint adr) 
{ 
    if(address != int.MinValue) 
     if(typeof(T) == typeof(int)) 
      return Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T)); 
     else 
      MessageBox.Show("Unknown read type"); 
} 
+6

爲什麼你想使用泛型,如果你想總是使用int? – Tommy 2011-04-29 09:20:15

+0

爲什麼使用uint作爲指針而不是專門爲此設計的類型,UIntPtr?或者,爲此,爲什麼不使用*指向int *的指針? – 2011-04-29 14:51:53

+0

爲什麼有兩個變量,一個叫做「地址」,一個叫做「adr」?他們的意思是一樣的嗎?他們之間有什麼區別? – 2011-04-29 14:52:59

回答

7

你需要從調用將返回值轉換到ChangeType

return (T)Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T)); 
1

嘗試鑄造:

return (T)Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T)); 
1

我已經嘗試了編譯器錯誤。但是我不知道這是不是你正在尋找的。

你必須把結果爲T

return (T)Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T)); 

,你必須返回時的條件失敗的值:

return default(T); 

這導致:

public T ReadMemory<T>(uint adr) 
{ 
    if (adr != int.MinValue) 
    { 
     if (typeof(T) == typeof(int)) 
     { 
      return (T)Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T)); 
     } 
     else 
     { 
      System.Windows.Forms.MessageBox.Show("Unknown read type"); 
     } 
    } 
    return default(T); 
}