我想定义一个通用方法,如果所提供的参数为int则返回42,否则返回不变的参数。
天真的实现无法编译:
// Compilation fails with: "Cannot implicitly convert type `int' to `T'"
public static T Id42<T>(T x) {
if(x is int) {
return 42;
}
return x;
}
先投射到对象确实可以,但是如果类型不匹配,则会失败并显示运行时错误:
// If I replace 42 with a string it compiles successfully and crashes at runtime
public static T Id42<T>(T x) {
if(x is int) {
return (T)(Object)42;
}
return x;
}
似乎最好的选择是返回Object
而不是T
。
理想情况下,我正在寻找一种告诉编译器“看起来,我返回的值具有我刚刚检查过的类型”的方法。这可能吗?