繁体   English   中英

通用方法:无法从元组转换为T

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM