调用重载函数时C#自动转换

时间:2017-09-12 12:49:17

标签: c# casting operator-overloading

让我们假设我有以下重载函数:

void DoSomething(int x) { ... }
void DoSomething(float x) { ... }
void DoSomething(decimal x) { ... }

在以下方法中,我需要调用正确的重载。这是一个简单的实现方式:

void HaveToDoSomething(object data)
{
    if (data is int) DoSomething((int)data);
    else if (data is float) DoSomething((float)data);
    else if (data is decimal) DoSomething((decimal)data);
}

当有大约20种类型需要检查时,这很乏味。是否有更好的方法自动完成所有这些投射?

我忘记提及的事情:DoSomething不适用于泛型,因为每种类型都需要以不同的方式处理,我只知道运行时的类型。

2 个答案:

答案 0 :(得分:2)

一种可能的方法是使用dynamic

void HaveToDoSomething(dynamic data)
{
    DoSomething(data);
}

答案 1 :(得分:1)

您可以使用pip install -r requirements.txt --force --upgrade,但它会对性能产生影响:

Reflection