C# 泛型委托类型推断

2024-03-22

为什么 C# 编译器无法在指定示例中将 T 推断为 int?

void Main()
{
    int a = 0;
    Parse("1", x => a = x);
    // Compiler error:
    // Cannot convert expression type 'int' to return type 'T'
}

public void Parse<T>(string x, Func<T, T> setter)
{
    var parsed = ....
    setter(parsed);
}

lambda 上的方法类型推断要求拉姆达参数在类型之前就已经知道returns被推断出来。例如,如果您有:

void M<A, B, C>(A a, Func<A, B> f1, Func<B, C> f2) { }

和一个电话

M(1, a=>a.ToString(), b=>b.Length);

那么我们可以推断:

A is int, from the first argument
Therefore the second parameter is Func<int, B>. 
Therefore the second argument is (int a)=>a.ToString();
Therefore B is string.
Therefore the third parameter is Func<string, C>
Therefore the third argument is (string b)=>b.Length
Therefore C is int.
And we're done.

看,我们需要 A 来算出 B,需要 B 来算出 C。在您的情况下,您想从... T 算出 T。但您不能这样做。

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

C# 泛型委托类型推断 的相关文章

  • 通用 scala 函数,其输入是变量数量的函数

    我想定义一个函数f需要另一个函数g 我们需要g采取采取n双打 对于某些固定n 并返回一个 Double 函数调用f g 应该返回具体值n 例如 f Math max 2因为 Math sin 具有类型 Double Double gt Do
  • Scala(或 Java)中泛型函数的特化

    是否可以在 Scala 中专门化泛型函数 或类 例如 我想编写一个将数据写入 ByteBuffer 的通用函数 def writeData T buffer ByteBuffer data T buffer put data 但由于 put
  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • 将指针转换为浮点数?

    我有一个unsigned char 通常 这指向一块数据 但在某些情况下 指针就是数据 即 铸造一个int的价值unsigned char 指针 unsigned char intData unsigned char myInteger 反
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 我们如何将数据从一个打开的表单传递到另一个打开的表单?

    winform中如何将数据从一个窗体传递到另一个打开的窗体 在 Windows 应用程序中 一个窗体打开另一个窗体 当我在父表单中输入一些数据时 这些数据将立即反映在另一个子表单中 这将如何发生 取决于你想要多花哨 最简单的方法就是直接调用
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs

随机推荐

  • 如何在Python中的setup.py中包含并安装本地依赖项?

    我正在创建一个setup py分发我的应用程序 该应用程序有许多可以通过 pip 安装的依赖项 它还有一些无法从 PyPI 安装的自定义依赖项 所以 我创建了一个custom package 0 1 whl它将包含在发行版中 并且必须在之后
  • XMPP - 名册订阅说明

    假设我的 Jabber 服务器上有 2 个用户 Alice 和 Bob 添加到名册中并订阅为both 我需要执行以下步骤 Alice 向 Bob 发送订阅请求 当 Bob 收到请求时 他会批准该请求 Bob 可能也对 Alice 的存在感兴
  • 将 2 个参数 Lambda 表达式转换为 1 个参数 Lambda 表达式(指定一个参数)

    我有表情 Expression
  • PHP-从字符串中删除所有制表符

    我可以从字符串中删除所有单个选项卡 Copying and pasting the tab directly txt str replace txt 这只会删除单个选项卡 但不会删除双选项卡 然后我尝试了这个 认为 t 足以找到选项卡 tx
  • Django Rest Framework 不允许我拥有多个权限

    我的 Django Rest 框架和权限有问题 例如 DRF 不允许我对我的观点拥有多个权限 如果我以管理员用户身份登录 API 我可以使用此 mixin 进行访问 class PermissionMixin object permissi
  • 博客中最常见的 3 页序列

    给定一个由字段 用户 页面 url 组成的网络日志 我们必须找出用户最常使用的 3 页序列 有一个时间戳 并且不能保证单个用户访问将按顺序记录 它可能像 user1 Page1 user2 Pagex user1 Page2 User10
  • 如何通过telnet发送POST请求

    我想知道如何向服务器 例如 Google 搜索 发送 POST 请求 我已经知道如何发送 GET 请求 例如 GET http www google com 我尝试这样做 POST wikipedia or POST wikipedia o
  • 用于编译程序的 G++ -I 选项

    这里有一个小问题 对于我这样一个Linux程序新手来说是无法解决的 现在我有一个需要编译的main cpp程序 有一个 include Down h 在文件的前面 实际上 这个头文件存在于另一个目录中 位于 include目录 另外 Dow
  • DAX 度量:动态地仅首先考虑每个组,然后总体返回其计数

    我们正在努力解决一个可能比我想象的更简单的问题 我只是被困住了 问题包括定义一个DAX Measure that 动态地仅计数first期间访问量对于每位患者 访问次数是不是第一期间必须是分配空白 价值 在讨论目标之前 请让我介绍一下场景
  • 数据库传输/服务器设置期间波兰字符集出现编码错误

    我正在尝试将我的一个数据库从一台主机 home pl 传输到另一台主机 我新设置的服务器 我试图传输的脚本是wordpress 不幸的是 无论使用哪种方法 我都在努力解决编码问题 新主机配置 在我的新服务器中 我在 my cnf 中使用以下
  • 从 java 加载库时出现“未定义符号:__cxa_pure_virtual”错误

    我有一个 Java 程序 需要加载本机代码库 通过 JNI 和 SWIG 但是当我尝试运行它时 出现如下错误 Exception in thread main java lang UnsatisfiedLinkError usr local
  • 使用 django-import-export 进行 django 迁移中的外键

    我在用着django 导入导出 https github com bmihelac django import export在迁移文件中加载 csv 文件 据我所知 这是 Django 1 7 加载初始数据的当前最佳实践 这对于第一个文件效
  • 如何使用 Git 作为内容分发网络

    Git Internal 一书提到在 p50 上使用 git 作为点对点内容分发网络 但没有提供太多细节 特别是如何拥有多个跟踪不同文件的分支 例子 工作目录 a00 exe a01 exe b00 exe c00 exe c01 exe
  • 倾斜一个角并向对角添加边框半径

    如何使用 CSS 重现这个形状 如何移动右上角 span Shift top right corner span 类似这样的东西 但仍然很难掌握 我会考虑使用图像 span border 2px dashed blue border rad
  • 我收到 TypeError: 'int' object is unsubscriptable

    我从我的代码中收到一条错误消息 上面写着TypeError int object is unsubscriptable 经过一番研究 我明白了它的意思 但我不明白为什么会出现问题 我将问题范围缩小到这段代码 def calcNextPos
  • SVG Circle 元素在比例变换时跳跃

    下面是使用 D3 绘制一个圆并在鼠标悬停时对其进行缩放的代码 它做了它应该做的事情 但也将 cricle 带到其他地方 这意味着圆圈缩放并跳转 翻译 到其他位置 我无法理解其原因 this node this chartLayer appe
  • 直接从浏览器上传字符串到s3,无需本地文件

    我正在使用 javascript node js 和 aws sdk 有很多关于使用签名 URL 直接将现有文件上传到 S3 的示例 但现在我尝试上传字符串并在 S3 中创建文件 而不需要任何本地保存的文件 请问有什么建议吗 请按照此处的示
  • 关于 ASP.Net 中的弹出窗口

    我有一个gridview其中包含一个details button作为最后一栏 My aspx
  • Wildfly 17 服务器提供的 Maven 依赖项

    我刚刚开始使用 Wildfly 服务器版本 17 并且我一直在研究我应该在 pom 文件中提供的依赖项 我在文档中没有找到任何显示所提供的依赖项及其正确版本的内容 作为一个例子 这是我想要的
  • C# 泛型委托类型推断

    为什么 C 编译器无法在指定示例中将 T 推断为 int void Main int a 0 Parse 1 x gt a x Compiler error Cannot convert expression type int to ret