考虑以下方法:
public void foo(int a) {
//do something with a
}
public void foo(ushort a) {
//do something with a
}
public void foo<T>(Nullable<T> a) where T : struct {
if (!a.HasValue) {
return;
}
foo(a.Value); //find appropriate method based on type of a?
}
有没有办法根据参数的泛型类型找到要调用的相应方法?例如,如果 (T)a 是 int,则调用第一个方法,如果是 ushort,则调用第二个方法。如果没有这样的方法超过,可能会抛出运行时异常。
我尝试了以下方法:
public void foo<T>(Nullable<T> a) where T : struct {
if (!a.HasValue) {
return;
}
switch(a.Value.GetType()) {
case typeof(int): foo((int)a.Value); break;
case typeof(ushort): foo((ushort)a.Value); break;
//and so on
}
}
但是编译器不喜欢强制转换(“无法将类型 T 转换为 int”);有什么办法可以实现我想要做的事情吗?