使用泛型将对象类型强制转换为泛型类型

3

我对泛型非常陌生,正在尝试实现它。在这里该如何使用呢?

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

我正在尝试将下面的值转换为通用类型,然后返回它。
dgvCurrencyMaster.Rows[RowNo].Cells[ColNo].Value

我需要了解两件事情。如何解决上述问题以及如何在我的代码中使用它。 请提供一些示例。
编辑: 它给出了错误:“错误:找不到'T'类型或命名空间名称(是否缺少使用指令或程序集引用?”

1
你需要在方法声明中添加 <T> - 请参考我的更新答案(或 Jon 的)。 - EMP
1个回答

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节省任何工作量。


@Evgeny:谢谢,这个解决了。你能否提供一些描述为什么在函数的两侧都使用了T的内容。它们在做什么等等。如果你能提供相关的参考资料,那将非常有帮助。 - Shantanu Gupta
在右侧,<T> 表示“此函数具有名为 T 的类型参数”。左侧的 T 只是返回类型 - 这恰好是稍后声明的类型参数。 - EMP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接