我有一个通用的方法:
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"
我该如何解决这个问题?
我怀疑你的实际代码是在类型上使用分支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)
但是你最好让你的输入逻辑正确,否则你将会抛出运行时错误.我个人不喜欢"谎言"的泛型方法,因为它们允许使用特定类型参数进行编译,但由于类型不兼容而在运行时爆炸.我想要实现多个相关的方法,你可以将类型绑定到你真正可以处理的那些类型.