2010-04-23 216 views
3

我对泛型非常陌生,试图实现它。我如何在这里使用它。使用泛型将类型对象类型转换为泛型类型

private T returnValueFromGrid(int RowNo, int ColNo) 
     { 
      return (T) dgvCurrencyMaster.Rows[RowNo].Cells[ColNo].Value; 
     } 

我想将以下值转换为泛型类型,然后将其返回。

dgvCurrencyMaster.Rows[RowNo].Cells[ColNo].Value 

这里我需要知道两件事。如何做到上述问题以及如何在我的代码中使用它。 请提供一些例如。

编辑

这是给我的错误错误类型或命名空间名称“T”找不到(是否缺少using指令或程序集引用

+1

您需要将''添加到您的方法声明中 - 请参阅我更新的答案(或Jon的)。 – EMP 2010-04-23 08:09:52

回答

4

它只是?

private T returnValueFromGrid<T>(int RowNo, int ColNo) 
{ 
    return (T)dgvCurrencyMaster.Rows[RowNo].Cells[ColNo].Value; 
} 

你以同样的方式使用T,如果它是一个类型的名称。

话虽如此,如果这就是你所做的一切,那么你不会从泛型中获得任何好处,因为方法的调用者必须指定类型。也就是说,使用泛型它看起来像这样:

var x = returnValueFromGrid<SomeType>(1, 2); 

没有泛型它应该是这样的:

var x = (SomeType)returnValueFromGrid(1, 2); 

你简单地推动投降入法,但没有真正保存任何工作 - 无论是程序员还是CPU。

+0

@Evgeny:Thx,这个解决了。你能否提供一些描述为什么T在功能的两边都被使用过。他们在做什么等等。如果你能提供一些相同的参考资料,那将是非常有用的。 – 2010-04-23 08:13:51

+0

在右边''说“这个函数有一个名为T的类型参数”。左边的'T'就是返回类型 - 恰好是稍后声明的类型参数。 – EMP 2010-04-23 08:19:54