通用方法:无法从Tuple转换为T

Mru*_*rug 1 .net c#

我有一个通用的方法:

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

    return default(T);
}
Run Code Online (Sandbox Code Playgroud)

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

我该如何解决这个问题?

Dam*_*ver 5

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

编译器无法跟踪内部逻辑,就其而言,当您尝试转换时,T它仍然可以是任何内容.你可以用第二次施放强制它的手:

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

    return default(T);
}
Run Code Online (Sandbox Code Playgroud)

但是你最好让你的输入逻辑正确,否则你将会抛出运行时错误.我个人不喜欢"谎言"的泛型方法,因为它们允许使用特定类型参数进行编译,但由于类型不兼容而在运行时爆炸.我想要实现多个相关的方法,你可以将类型绑定到你真正可以处理的那些类型.

  • 此实现只是将编译时错误转换为运行时错误.您希望拥有这些例外或实现适当的通用.... (2认同)