带参数和选项的 C# 方法重载

2024-03-06

今天我发现了一些奇怪的事情。我想知道为什么这有效:

static void Main(string[] args)
{
    Console.WriteLine(ExampleMethod(3));
    Console.ReadKey();
}

public static string ExampleMethod(int required, params int[] optionalint)
{
    return "ExampleMethod 2";
}

public static string ExampleMethod(int required, string optionalstr = "default string", int optionalint = 10) 
{
    return "ExampleMethod 1";
}

想一想:调用ExampleMethod(3);的结果是什么?

在我看来,这会导致不可预测的结果。就我而言,始终调用方法 1。但当我更改了方法 1 的签名时,主方法调用了方法 2(当然)。

我没想到会出现这样的行为,我预计会出现“AmbigouslyReferenceException”或至少是编译器警告。


我期望这种行为,因为编译器知道默认值optionalstr and optionalint因此能够根据要使用的值做出决定。它不知道要设置什么值int[] optionalint。由于当您有可选参数时,编译器“更确定”要使用什么,因此它会调用该方法。

如果你添加了这样的额外方法

public static string ExampleMethod(int required)
{
    return "ExampleMethod 3";
}

这将是被调用的方法,因为编译器将首先选择没有可选参数的方法。

更详细的解释 https://stackoverflow.com/questions/3190248/how-does-c-sharp-choose-with-ambiguity-and-params关于过载解析。

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

带参数和选项的 C# 方法重载 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • Simpy 中的资源未释放 - 我做错了什么?

    我已按照建议简化了代表问题的代码并尝试进行调试 这是代码的最简单版本 但仍然包含错误 import simpy SIM TIME 5 def source env i 0 while True i 1 env process train e
  • 在 PHP 脚本中对 5000 个地址进行地理编码

    我希望在 PHP 脚本中一次对 5000 多个地址进行地理编码 这只会运行一次 我一直在研究谷歌作为这样做的潜在资源 但是我读过报告 在通过谷歌运行 200 个左右的查询后 谷歌将让你开始这一天 我只是想知道是否有其他方法可以对 5000
  • Git 使用错误的子密钥使用 GPG 密钥对提交进行签名

    我对 git 和使用 GPG 密钥签署提交有疑问 我有一个主密钥 仅用于认证 我为每台计算机创建了两个子密钥 仅用于签名 我已将公钥添加到 Github 并使用配置了 gituser signingKey配置选项 问题是 git 似乎忽略了
  • 在 Android 中抑制包中的 toast

    我正在开发一个 Android 应用程序 我试图用Toast 我用了Toast在其他项目中一切正常 但在这个应用程序中 当Toast应该出现 但它没有出现 Logcat 显示下一条消息 Suppressing toast from pack
  • 通过ajax打开FileStreamResult(作为下载的文件)

    是否可以使用 ajax 调用将 FileStreamResult 作为下载的文件打开 控制器方式 public FileStreamResult DownloadPDF var stream myHandler getFileStream
  • 在 iOS 上哪里可以添加来自 Firebase 的数据库引用?

    我正在按照此说明在 iOS 应用程序上安装和设置实时数据库link https firebase google com docs database ios start set up firebase database我很困惑在哪里添加声明s
  • Solr 查询无法正常工作

    我不知道出了什么问题 这实际上是一个非常简单的查询 在我的 Solr 搜索中不起作用 http IP ADDRESS solr CORE NAME select indent on q Bangalore wt json 我的数据库中有超过
  • SqlCommand-SqlConnection使用处置问题

    根据 MSDN 如果 IDisposable 资源 嵌套的内部using语句包含外部using的资源 语句中 嵌套资源的 Dispose 方法释放 包含的资源 MSDN http msdn microsoft com en us libra
  • 在ContinueWith()之后,ConfigureAwait(False)不会改变上下文

    我不知道我是否做错了什么 或者我在异步库中发现了错误 但在我使用 continueWith 返回到同步上下文后运行一些异步代码时 我发现了一个问题 更新 代码现在运行 using System using System ComponentM
  • 如果出现新组合,VBA 在表中添加行

    我有点难以找到一种根据资本支出类别 合作伙伴数量和期间向表中可变地添加行的方法 Mu final table looks like more sections but for example it is not a listobject i
  • 指定 Maven security-settings.xml 文件的自定义位置?

    使用 Maven 您可以轻松指定 settings xml 位置 例如 mvn s custom dir settings xml package 有没有类似的方法来指定自定义 security settings xml 其背后的原因很简单
  • 使用日历检查日期是否有效

    我想使用日历方法来设置年份和月份 但想要某种指示如果日期无效 例如 calendar set 2013 Calendar JANUARY 23 is a valid date calendar set 2013 Calendar JANUA
  • 如何启用/禁用 JEditable

    SOLUTION 感谢 Arman 的 P 概念验证 终于让它可以与我的网站一起使用了 CODE Edit Note function function makeEditable edit editable ajax save php ed
  • CStr() 与 Str() 与 .ToString()

    我想知道两者之间到底有什么区别CStr Str and ToString Label1 Text CStr Int Rnd 10 and Label1 Text Str Int Rnd 10 and Label1 Text Int Rnd
  • 以编程方式将主题应用到按钮

    是否可以以编程方式将 Widget AppCompat Button 主题应用于按钮 Button button new Button context button setText Button 目前 我正在使用自定义可绘制资源 尝试实现类
  • 如何从GridView中删除一行?

    我在用GridView控制在asp net questions tagged asp net 2005 c questions tagged c 23 using 如何从中删除特定行GridView 我编写了以下代码 但这不起作用 Data
  • 退出应用程序会导致错误“来自调试器的消息:由于信号 9 而终止”

    我正在编写一个基本的音乐播放器应用程序 但在处理应用程序状态转换时遇到一些问题 我正在使用 Swift 3 和 MPMusicPlayerController systemMusicPlayer 目标是这样的 1 当用户点击主页按钮并且应用
  • 使用 Sass 以可重用的方式设计一组特定的输入类型

    我想要一个 mixin 函数 它返回 HTML5 输入类型的列表 我想在一个地方管理它 当新类型出现时 改变函数 而不是代码中其他地方的所有地方 问题似乎是 mixins 的设计目的不是返回可以在 CSS 花括号之外使用的字符串 这是我的
  • jQuery 热键 - 解除绑定?

    我有一个 jQuery 对话框 它初始化热键如下 循环从 1 到 9 问题是 如果您关闭对话框然后重新打开对话框 它不断重新绑定 因此当您按下 1 键时 它会运行两次 三次 四次等 它会不断增长 我尝试杀死对话框上的键绑定关闭 docume
  • 带参数和选项的 C# 方法重载

    今天我发现了一些奇怪的事情 我想知道为什么这有效 static void Main string args Console WriteLine ExampleMethod 3 Console ReadKey public static st