[英]Generic method: Cannot convert from Tuple to 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"
如何解决此问题?
我怀疑您的实际代码在类型T
上使用了分支,然后有条件地尝试返回应该兼容的内容。
编译器无法跟踪内部逻辑,就其而言,当您尝试进行转换时, T
仍然可以是任何值 。 您可以通过第二次施放来强制其手:
public T Search<T>(entry entry)
{
return (T)(object)new Tuple<decimal, decimal>(entry.from, entry.to);
return default(T);
}
但是您最好拥有正确的键入逻辑,否则将抛出运行时错误。 我个人不喜欢“谎言”的通用方法,因为它们将允许某些东西使用特定的类型参数进行编译,但由于类型不兼容而在运行时会崩溃。 相反,我希望实现多种相关方法,在这些方法中,您可以将类型绑定到您只能处理的类型。
要进行以下工作,您需要T成为Tuple的基类。
(T)new Tuple<decimal, decimal>(entry.from, entry.to);
元组是一个静态类,不能从系统名称空间下的任何内容派生。
因此,如果要处理两个属性上的数据,请使用这些属性创建一个新类,然后从T派生它
或者,返回类型取为
Tuple<decimal, decimal>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.