首页 > 解决方案 > 通用方法:无法从元组转换为 T

问题描述

我有一个通用方法:

public T Search<T>(entry entry)
{
    return (T)new Tuple<decimal, decimal>(entry.from, entry.to);

    return default(T);
}

我有逻辑根据T传入的值返回不同的结果,但是编译器不允许我这样做,而是我得到这个错误:"Cannot convert from Tuple to T"

我该如何解决这个问题?

标签: c#.net

解决方案


我怀疑您的实际代码是在类型上使用分支T,然后有条件地尝试返回应该兼容的东西。

编译器无法跟踪内部逻辑,就它而言,当您尝试转换时,它T仍然可以是任何东西。您可以通过第二次施法强制它的手:

public T Search<T>(entry entry)
{
    return (T)(object)new Tuple<decimal, decimal>(entry.from, entry.to);

    return default(T);
}

但是你最好让你的打字逻辑正确,否则你会抛出运行时错误。我个人不喜欢“撒谎”的泛型方法,因为它们允许使用特定类型参数编译某些东西,但由于类型不兼容而在运行时崩溃。相反,我希望实现多种相关方法,您可以将类型绑定到您真正可以处理的类型。


推荐阅读