我可以在通用方法中为特定类型返回任意值吗?

时间:2019-03-07 09:39:21

标签: c# generics

我想定义一个通用方法,如果所提供的参数为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

理想情况下,我正在寻找一种告诉编译器“看起来,我返回的值具有我刚刚检查过的类型”的方法。这可能吗?

0 个答案:

没有答案