2011-04-29 80 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); 
}