这是 VB.NET 编译器中的错误还是设计造成的?

2024-04-26

我发现 C# 和 VB 编译器之间的重载解析存在差异。我不确定这是错误还是设计使然:

Public Class Class1
    Public Sub ThisBreaks()

        ' These work '
        Foo(Of String)(Function() String.Empty) 'Expression overload '
        Foo(String.Empty) 'T overload '

        ' This breaks '
        Foo(Function() String.Empty)
    End Sub

    Public Sub Foo(Of T)(ByVal value As T)

    End Sub

    Public Sub Foo(Of T)(ByVal expression As Expression(Of Func(Of T)))

    End Sub
End Class

请注意,重载的 Foo 方法是否在 VB 中定义并不重要。唯一重要的是调用点是在 VB 中。

VB编译器会报错:

重载解析失败,因为没有可访问的“Foo”对于这些参数来说是最具体的:

'Public Sub Foo(Of String)(expression As System.Linq.Expressions.Expression(Of System.Func(Of String)))':不是最具体。

'Public Sub Foo(Of )(value As )':不是最具体的。


添加用于比较的 C# 代码:

class Class1
{
    public void ThisDoesntBreakInCSharp()
    {
        Foo<string>(() => string.Empty);
        Foo(string.Empty);
        Foo(() => string.Empty);
    }

    public void Foo<T>(T value)
    {

    }

    public void Foo<T>(Expression<Func<T>> expression)
    {

    }
}

暂时忽略“如果 C# 编译器这样做,它一定是正确的,因此它是 VB 编译器中的一个错误”的假设。我立刻就能看出其中的歧义:

Foo(Function() String.Empty)

可以调用T版本,替换Func(Of String)或者它可以将单行 lambda 重新分类到表达式树中,并调用Expression(Of Func(Of String))方法。没有理由优先选择其中之一,事实上 VB 会阻止您继续操作,而不强迫您指定所需的哪一个。

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

这是 VB.NET 编译器中的错误还是设计造成的? 的相关文章

  • ptrace和waitpid有什么关系?

    我正在练习使用ptrace但我不太了解它和之间的关系waitpid 这是我的测试程序 int main int argc char argv pid t pid 22092 if ptrace PTRACE ATTACH pid NULL
  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • Python 相当于 Bit Twiddling Hacks 中的 C 代码?

    我有一个位计数方法 我正在尝试尽可能快地实现 我想尝试下面的算法位摆弄黑客 http graphics stanford edu seander bithacks html CountBitsSetParallel 但我不知道 C 什么是
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • “为 .Net 1.1 生成 Web 服务代理的任何工具”

    我有一个 WSDL 文件 其中包含指向外部 XSD 的链接 我也将 xsd 部署到了正确的相对路径 因为它在 WSDL 中是引用的 当我尝试使用 VS 2003 Net 1 1 wsdl 工具 生成代理时 代理未生成 然而它在 VS 200
  • C# 事务中的事务

    我正在使用 C 将发票的平面文件导入到数据库中 如果遇到问题 我将使用 TransactionScope 回滚整个操作 这是一个棘手的输入文件 因为一行不一定等于一条记录 它还包括链接记录 发票将包含标题行 行项目和总计行 有些发票需要跳过
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • 创建仅包含枚举的 COM 库时出现问题

    我正在做一个 COM 互操作项目 用 C 和 NET Interop 替代一些 VB 和 C ATL COM 项目 当我在 NET 中定义枚举并将它们设为 ComVisible 时 它 们会公开为 Typelib EnumType Enum
  • 如何按名字和姓氏排序,然后按 SamAccountName 排序,其中并非所有姓名都有名字和姓氏?

    目前 我有以下内容 来自 LDAP Get context based on currently logged on user PrincipalContext domainContext new PrincipalContext Cont
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • 这个元组创建习惯有名字吗?

    On the 增加邮件列表 http lists boost org Archives boost 2014 06 214213 php LouisDionne 最近发布了以下创建类似元组的实体的巧妙技巧 include
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • OpenSSL:无需 SSL_read() / SSL_write() 即可执行加密/解密

    我已经用 C 语言编写了一个基于事件的网络库 现在我想通过 OpenSSL 添加 SSL TLS 支持 而不是使用SSL read and SSL write 我宁愿让 OpenSSL 只执行传出 传入数据的加密 解密 让我自己传输 接收数
  • 在 C++ 中什么时候首选传递指针而不是引用传递?

    我可以想象一种情况 其中输入参数可以为 NULL 以便首选传递指针而不是传递引用 有人可以添加更多案例吗 在传递的对象实际上将被修改的情况下 有些人更喜欢传递指针 当对象通过引用传递时 它们使用 pass by const referenc
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js
  • 在地图上使用 find

    如何使用 find 和 aconst iterator如果你有一个地图定义为 typedef std pair
  • C#“var”关键字在 VB.NET 中的等价物是什么?

    例如 我如何获得 VB NET静态类型局部变量是static赋值右侧的表达式的类型 像这样 Dim http msdn microsoft com en us library 7ee5a7s1 aspx我的变量 3 你还需要 选项推断 ht

随机推荐

  • 如何为幻灯片中的每个图像添加链接?

    我使用了 为什么这张幻灯片闪烁 中的代码 彼得在网站上给出了您的答案之一 它工作得很好 没有任何闪烁 但我的问题是如何为每个图像添加超链接 我把代码贴出来供大家参考 Script function Edit these Assumes yo
  • jQuery $(window).resize() 在减小窗口高度时不起作用

    我有一个 id 为 main 的 div 我想使用 jQuery 设置它的高度并使其在window resize它的高度是使用函数修改的 但由于某种原因 它仅在增加窗口高度时才能正常工作 而在减小窗口高度时则不起作用 这是JS functi
  • 设置 sendBufferSize() 后,UDP 套接字的消息太长

    我正在尝试发送 UDP 数据报 包含协议缓冲区消息 并收到消息太长的异常 java io IOException Message too long at java net PlainDatagramSocketImpl send Nativ
  • Angular 动态表上的 Jquery 表排序器

    我有一个表 需要使用 Jquery Tablesorter 插件进行排序等 它对于静态表工作得很好 但是当我尝试在 Angular 支持的表上使用时 它不起作用 有谁知道为什么会这样 http plnkr co edit SUjs1h7pr
  • Vaadin 7.0.1 带有 JPAContainer 和 FieldGroup 的组合框

    抱歉 如果这是一个新问题 我有两个 JPAContainer 一个用于 Employee 类 表 一个用于语言类 表 员工可以选择一种语言 我正在尝试创建一个员工编辑表单 其中包含用于语言选择的组合框和用于处理绑定和创建的 FieldGro
  • 获取进程的返回值

    您好 我正在尝试执行以下操作 我有一个可以接受参数 数字 的过程 并返回这些数字的总和 Process P Process Start sPhysicalFilePath Param int result P ExitCode 我从 Exi
  • 如何在不锁定 Excel 文件的情况下打开它?

    我有一个构建 Excel 报告 然后为用户打开它的流程 问题是 如果有人让文件保持打开状态 则该文件将保持锁定状态 并且在第一个人退出 Excel 文件之前 其他人都无法生成报告 有没有办法打开 Excel 文件而不锁定它 使用Proces
  • android什么时候会在没有唤醒锁的情况下停止CPU?

    我知道 android 使用唤醒锁来保持 cpu 运行或屏幕打开 很明显 屏幕唤醒锁可以防止用户活动计时器在用户不活动一段时间后关闭屏幕 但我想知道cpu唤醒锁到底什么时候生效 1 如果我创建一个新线程并在没有任何唤醒锁的情况下在后台继续耗
  • 如何在 Jupyter Notebook 中加载 CSV 文件?

    我是新人 正在研究机器学习 我偶然发现了一个在网上找到的教程 我想让该程序运行起来 这样我就能更好地理解 但是 我在将 CSV 文件加载到 Jupyter Notebook 时遇到问题 我收到此错误 File
  • “sendKeys”在 Selenium WebDriver 中不起作用

    我无法使用 WebDriver 在我的应用程序中赋予任何价值 我的应用程序正在使用框架 我可以清除文本框的值driver findElement By name name clear 但我无法使用任何值driver findElement
  • Jenkins JobDSL multibranchPipelineJob更改脚本路径

    我正在尝试在 jobDSL 中创建多分支PipelineJob 但是 Jenkinsfile 位于默认位置的替代位置 我已经查看了文档https jenkinsci github io job dsl plugin path multibr
  • 上传到服务器后,页面上只有一个 getter 起作用

    我有一个使用 Struts2 框架的网站 它在我的本地计算机上运行良好 但是当我将其上传到远程服务器 托管 时 一些 getter 和 setter 变得不调用 例如 操作 ForecastAction java JSP 预测 jsp 这是
  • 在 cakephp 2.0.2 中使用 shell 类的插件组件

    我想使用我的 shell 类中的插件组件 我正在尝试使用 App import Component Myplugin Mycomponent this gt Mycomponent new MycomponentComponent 不幸的是
  • 如何处理 Android 国际象棋应用程序中的拖动?

    我刚刚开始开发 android 应用程序 使用 java 在 android studio 中 如果这很重要的话 我正在做一个小项目 只是为了好玩 我想创建自己的国际象棋应用程序 到目前为止我已经做了很多事情 我设置了一个菜单来切换到另一个
  • 如何识别 Pandas 的 Parquet 后端

    据我所知 Pandas 可以使用不同的后端读取和写入 Parquet 文件 pyarrow and fastparquet 我有一个带有 Intel 发行版的 Conda 发行版 并且 它可以工作 我可以使用pandas DataFrame
  • 我们能让 1 == 2 成立吗? [复制]

    这个问题在这里已经有答案了 Python ints are objects封装实际数值 我们可以修改该值吗 例如设置对象的值1到2 以便1 2变成True 我们可以 但不要在家里这样做 说真的 1对象在很多地方使用 我不知道这可能会破坏什么
  • R 错误:“check.data 中的错误:参数应该是数字”

    我正在学习 R 编程语言的 kohonen 库 我创建了一些人工数据来尝试一些功能 我尝试仅对连续 即 type as numeric 数据使用 supersom 函数 一切正常 然而 当我尝试在连续和分类 type as factor 上
  • 播放 video.js ustream m3u8 文件流

    我尝试在网页中播放带有 video js 的 m3u8 文件流 但我无法做到这一点 我不知道错误在哪里
  • 当前安全范围书签的内核资源限制是多少?

    的文档 NSURL startAccessingSecurityScopedResource state 您必须平衡对 startAccessingSecurityScopedResource 方法的每次调用与对 stopAccessing
  • 这是 VB.NET 编译器中的错误还是设计造成的?

    我发现 C 和 VB 编译器之间的重载解析存在差异 我不确定这是错误还是设计使然 Public Class Class1 Public Sub ThisBreaks These work Foo Of String Function Str