我有一个通用方法:
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"
如何解决此问题?
答案 0 :(得分:5)
我怀疑您的实际代码在类型T
上使用分支,然后有条件地尝试返回应该兼容的内容。
编译器无法跟踪内部逻辑,就其而言,T
在尝试进行转换时可能仍然是任何内容。您可以通过第二次施力来强迫它的手:
public T Search<T>(entry entry)
{
return (T)(object)new Tuple<decimal, decimal>(entry.from, entry.to);
return default(T);
}
但是您最好具有正确的键入逻辑,否则将引发运行时错误。我个人不喜欢“谎言”的通用方法,因为它们将允许某些东西使用特定的类型参数进行编译,但由于类型不兼容而在运行时会崩溃。相反,我希望实现多个 related 方法,在这些方法中,您可以将类型绑定到您只能处理的类型。
答案 1 :(得分:0)
要完成以下工作,您需要T成为Tuple的基类
(T)new Tuple<decimal, decimal>(entry.from, entry.to);
元组是一个静态类,不能从系统名称空间下的任何内容派生。
因此,如果要处理两个属性上的数据,请使用这些属性创建一个新类,并从T派生它。
或者,返回类型取为
Tuple<decimal, decimal>