c# - 改用泛型类型参数重载?

标签 c# generics parameters overloading

我想添加一个通用类型方法 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/

相关文章:

c# - 需要 HttpWebRequest 对象的帮助

c# - Clipboard.GetText 返回 null(空字符串)

C++如何创建一个自动转换图?

Java:多态性是否只适用于具有相同签名的方法?

python - 检查传递的参数在 Python 中是否有效的最佳方法是什么?

c# - 将 Dropbox 生成的访问 token 与 DropNetRT 结合使用

c# - header 检查 C# 总是 403?

java - 通用类还是抽象类?

具有继承和协变的 Java 泛型

c++ - 可变参数函数 va_arg() 返回不正确的参数