我想添加一个通用类型方法 DoSomething<T>
,但为了向后兼容,我希望它简单地从具有相同名称的现有方法传递泛型类型的类型参数。
public void DoSomething<T>(Data data)
{
//do something with Data, it depends on the type of T
}
public void DoSomething(Data data, Type dataType)
{
DoSomething<dataType>(group);
}
然而,<dataType>
在新DoSomething
抛出以下类型检查错误:“需要类型名称或命名空间。”
有人可以帮助我理解使上述示例成为类型检查错误的思维差距吗?我正在做的只是……糟糕的设计吗?
最佳答案
泛型是关于在编译时知道类型的——你只在执行时知道类型。
有两种方法可以解决这个问题:
让通用代码调用非通用代码。这很简单,但您将无法享受泛型的任何好处。
使用反射从非泛型代码中调用泛型代码。这很繁琐而且性能不佳,但您可以弃用非通用代码并最终将其删除。
或者您现在可以删除它,然后修复所有问题:)
关于c# - 改用泛型类型参数重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869374/