c# - 通用方法:无法从元组转换为 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);
}
但是你最好让你的打字逻辑正确,否则你会抛出运行时错误。我个人不喜欢“撒谎”的泛型方法,因为它们允许使用特定类型参数编译某些东西,但由于类型不兼容而在运行时崩溃。相反,我希望实现多种相关方法,您可以将类型绑定到您真正可以处理的类型。
推荐阅读
- ruby - 如何在 ruby 中测试一个简单的救援块
- r - 如何检查和删除一列中的字符串是否与R中另一列中的字符串匹配
- macos - 如何获取 Automator 应用程序的自身路径?
- node.js - 将 cookie 发送回客户端
- dojo - 在 dojo BorderContainer 中设置中心窗格的最小尺寸
- flutter - Flutter textfield onChanged - 检测最后输入的文本是否是标签句柄'@mention'
- docker - 将 Docker Entrypoint 日志实时发送到 APP
- javascript - Vercel 现在服务器不适用于谷歌电子表格
- text - 从缓冲区中删除换行符(在导入 ORG 以在保留段落的同时展开文本时很有用)
- python - 通过搜索另一个数据框来映射新列的值