C# 是否支持返回类型的类型推断?

2023-11-26

这只是一个好奇心,是否有一个基本的事情可以阻止这样的事情(或者纠正我,如果已经有某种方法):

public TTo Convert<TTo, TFrom>(TFrom from)
{
    ...
}

像这样调用:

SomeType someType = converter.Convert(someOtherType);

因为如果你这样做会发生什么?

static void M(int x){}
static void M(double x){}
static T N<T>() {}
...
M(N());

现在T是什么?整数还是双精度?

当您知道要分配给什么类型时,解决问题就很容易了is,但很多时候您分配给的类型是您首先要弄清楚的事情.

从内到外的推理已经够难的了。从外到内的推理要困难得多,并且同时做这两件事是极其困难的。如果这对于compiler要了解发生了什么,想象一下当可以进行推断时,人类尝试阅读、理解和调试代码有多么困难from and to表达式上下文的类型。这种推理使得程序harder去理解,不easier,因此将其添加到 C# 中并不是一个好主意。

现在,也就是说,C#does使用 lambda 表达式支持此功能。当遇到重载解析问题时,其中 lambda 可以绑定两个、三个或一百万不同的方式,我们以两种、三种或一百万种不同的方式绑定它,然后评估这百万种不同的可能绑定,以确定哪一种是“最好的”。这使得重载解析在 C# 中至少是 NP-HARD,我花了一年的时间才实现。我们愿意进行这项投资,因为 (1) lambda 非常棒,并且 (2) 大多数时候人们编写的程序可以在合理的时间内进行分析并且可以被人类理解。所以这个成本是值得的。但总的来说,这种高级分析是不值得付出代价的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 是否支持返回类型的类型推断? 的相关文章

随机推荐

  • Laravel 5 更改 public_path()

    我正在尝试移动public文件夹到其他地方 但是找不到修改的地方public path 多变的 现在 public path 返回错误的文件夹路径 我可以在哪里设置变量public path 您可以使用 ioc 容器覆盖公共路径 对我来说完
  • 跨多个模型的 Rails 搜索

    我有一个问题 我有一个显示视图 充当仪表板并引入来自其他模型的记录 然后引入与之关联的模型 我有一个简单的搜索表单 可以很好地搜索一个模型 但我不知道如何让它也搜索关联的模型 我认为全文搜索是没有必要的 而且我不确定它会如何工作 因为我不想
  • 带按钮的滚动列表视图

    我想通过按按钮滚动列表视图 我使用上下两个按钮 当我按下向上按钮时 列表视图应该向上移动一行 当我按下向下按钮时 列表视图应该向下移动一行 我的列表视图基于this关联 我找到了滚动视图的一个很好的例子here 现在我的问题是我需要使用列表
  • 何时在休眠中使用延迟加载/预加载?

    我相信使用 Hibernate 加载对象只有两种方法 一种是延迟加载 一种是预先加载 延迟加载有其自身的优点 它不是加载大量对象 而是仅在需要时才加载 我还了解到 如果您想强制加载一个对象的所有子对象 您可以简单地调用parent getC
  • php 将十进制转换为十六进制

    我正在使用内置 OpenSSL 库从数字证书中提取序列号 但是 我无法将此数字精确转换为十六进制 提取的数字最初是十进制的 但我需要它是十六进制的 我试图转换的数字是 114483222461061018757513232564608398
  • 将SqlDataReader写入立即窗口c#

    我正在尝试调试引发错误的 SQL 响应 将 varchar 值 0 01 转换为数据类型位时转换失败 这没有多大意义 因为对象没有任何书籍 Code using var connection connectionProvider GetDb
  • 如何提前ServiceStack中的会话超时

    ServiceStack 中的身份验证 存储库和缓存提供程序提供了一种简单的方法来将登录会话添加到 Web 应用程序 几乎不需要任何额外的代码 我发现可以配置身份验证提供程序的会话超时 例如 new CredentialsAuthProvi
  • 如何更改 JBoss 7 java Web 服务中的肥皂地址

    如何更改网络服务中的肥皂地址 我正在开发 JBoss 7 1 1 我有这个网络服务类 WebService public class Card WebMethod public CardResponseDTO insertCard WebP
  • 文件获取内容不起作用?

    我正在使用cakephp 我正在尝试使用 file get contents 从 facebook 获取数据 我收到警告 警告 2 file get contents function file get contents URL 服务器中禁
  • 存储每日页面浏览量以及总浏览量的最有效方法

    关于在数据库中存储文章或视频的页面浏览量进行了很多讨论 但我似乎找不到任何有关存储每日页面浏览量的信息 例如 DeviantArt 在一个小图表中向您显示过去 15 天左右的时间以及每个人获得的页面浏览量 以及个人资料的总页面浏览量 您可以
  • 对列表中的元素求和[重复]

    这个问题在这里已经有答案了 这是我的代码 我需要对列表中未定义数量的元素求和 这个怎么做 l raw input l l split l pop 0 我的输入 3 5 4 9输入后我通过删除第一个元素l pop 0 After split
  • 重新排序sql server中的身份主键

    是的 我非常清楚后果 但我只是想重新排序它们 从1开始到结束 如何使用单个查询对键重新排序 它是聚集主键索引 重新排序就像 First record Id 1 second record Id 2 主键是 Int 删除PK约束 删除身份列
  • 错误:任务“:app:processDebugResources”执行失败。 > 在索引 4 处

    在最新 SDK 的修订版 2 更新后 我在构建项目时遇到问题 抱歉 我不记得版本号 我之前成功运行了代码 我不认为我的项目中有任何错误 我经常收到错误消息 因为 IDE 发生内部错误 与此有关 请帮忙谢谢 下面给出了所需的代码 应用程序 b
  • LLVM out of source pass build:不支持可加载模块(在 Linux 上)

    几周前 我在 debian wheezy 上从 trunk 编译并安装了 LLVM 配置和制作 现在尝试从源代码中编译llvm mutate 传递 AFAICC llvm mutate 遵循 cmake超出源通道构建说明 当尝试构建 llv
  • 防止按下后退按钮后重新提交表单

    我在这里的处境有点微妙 在我的组织中 我们设计库存管理系统 它是一个基于 JSP 页面和处理它们的 servlet 的 Web 应用程序 我被要求解决一个特定问题 我们有一个带有 HTML 表单的 JSP 页面 其中包含库存详细信息 当用户
  • 如何使用buildozer和最新的kivy构建kivy应用程序?

    使用 buildozer 我已经成功构建并运行了一个 Android 应用程序 Buildozer 使用 kivy stable 1 7 如何使用最新的 kivy 1 8 构建 kivy 应用程序 我注意到在https github com
  • Android Espresso 多重索引失败

    我们在应用程序中使用 multidex 很长一段时间 但最近最新更新后 它在 android API 如果我为缺少的类定义 multidexKeepProguard 例如 java lang NoClassDefFoundError rx
  • 使用 CSS 为透明文本添加阴影

    有没有办法添加一个阴影透明文本以便文本后面的背景保持可见 也许有某种方法可以使用文本本身作为掩码 或者文本混合模式 具有合理的跨浏览器支持 我天真的尝试 span background image url http i imgur com
  • VS Code 的文档/智能感知弹出窗口在鼠标悬停时消失

    将鼠标悬停在变量上后 我在滚动弹出框时遇到问题 它就这样消失了 我希望能够滚动浏览它 我在 Windows 10 x64 上使用带有 Python 扩展的 Visual Studio Code 1 41 1 Set editor hover
  • C# 是否支持返回类型的类型推断?

    这只是一个好奇心 是否有一个基本的事情可以阻止这样的事情 或者纠正我 如果已经有某种方法 public TTo Convert