gpt4 book ai didi

c#-4.0 - 编译器对具有命名参数的(不明确)方法解析发出警告

转载 作者:行者123 更新时间:2023-12-02 18:29:03 24 4
gpt4 key购买 nike

一个问题是关于以下代码是否应该产生编译器警告(它不会)。它声明了两个具有相同名称/返回类型的方法,其中一个方法有一个带有默认值的附加命名/可选参数。

注意:从技术上讲,该解决方案并不含糊,因为规则明确规定将调用第一个方法。请参阅here, Overload resolution, third bullet point 。毫无疑问,这种行为对我来说也很直观。

public void Foo(int arg) { ... }

public void Foo(int arg, bool bar = true) { ...}

Foo(42); // shouldn't this give a compiler warning?

我认为编译器警告在这里会很直观。尽管代码在技术上是干净的(是否是健全的设计是另一个问题:))。

最佳答案

实际上,我不同意它需要警告。主要问题是,该代码可能合法,如果是这种情况,您将必须显式禁用警告。

我的意思是,一般来说,当您收到警告时,您将能够更改代码以消除警告(并且可能同时使代码变得更好)。但在这种情况下,您可能是故意这样做的,并且无法更改代码来消除警告。

例如,“无法访问的代码”警告是您可以删除无法访问的代码来消除警告的内容。或者“找不到引用”警告 - 这通常是一个信号,表明您将收到“未定义类型”错误,但如果没有,那么您可以简单地删除引用。或者可能是“先前的 catch 子句已捕获所有异常”警告:在这种情况下,您需要更改代码,以便新子句出现在 catch-all 之前,或者完全删除 catch。

但要点是,在每种情况下,当您收到警告时,您应该更改代码,并且进行更改总是会产生“更好”的代码。但是,在这个问题的情况下,调用并不含糊(就编译器而言),我认为您不能认为编写这样的代码总是是一个错误,因此不应该有警告。

如果编译器对您所做的事情可能不是最好的想法的每种情况发出警告,那么我们就会被警告淹没!

关于c#-4.0 - 编译器对具有命名参数的(不明确)方法解析发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com