【发布时间】:2017-09-12 12:49:16
【问题描述】:
假设我有以下重载函数:
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 不适用于泛型,因为每种类型都需要以不同方式处理,而我只知道运行时的类型。
【问题讨论】:
-
使
DoSomething通用 -
你能改变
DoSomething的实现吗? -
你从哪里得到
data?它的来源没有提供任何关于它的类型的信息? -
@TimSchmelter 我认为泛型不适用于我的情况,每种类型都需要以不同方式处理。例如,如果您需要将数据序列化为特定格式,则需要对每种类型进行不同的处理。
-
@mjwills 是的,动态是我认为我曾经见过的方法,但忘记了。 “反射”方法更有用,因为它也可以在 Java 中应用。我不知道该选择哪个答案,因为只有一个,而且两个都有帮助。
标签: c# casting operator-overloading