gpt4 book ai didi

c# - 参数 : (required, optional) vs (required, required, optional)

转载 作者:行者123 更新时间:2023-11-30 12:56:51 29 4
gpt4 key购买 nike

我定义了以下方法:

void Write(string fileContent, string fileName, string container = StorageBlobContainers.ProfilePictures)

代码编译没有问题,所以我写了代码来执行它(来自不同的文件):

string json = JsonConvert.SerializeXNode(node);
FileProcessor.Write(json, "productscontainer");

但由于某种原因,它似乎什么也没做。
经过几分钟努力理解问题后,我终于找到了它。在同一个类的某处,已经有一个 Write 函数定义如下:

void Write(string filePath, string container = StorageBlobContainers.ProfilePictures)
{
if (!File.Exists(filePath))
return string.Empty;
...

这真的让我很困惑,因为它编译得很好,当然,这是有道理的,因为一个方法有 3 个参数签名而另一个方法有 2 个,但这不是非常模棱两可和/或容易出错吗?对我来说,似乎没有一种方法是“合乎逻辑的”选择。为什么选择第二个而不是另一个?

最佳答案

是的,方法解析可能很棘手,所以在编写多个重载时始终记住这一点。他们不应该像现在这样对你模棱两可。编译器只是选择了最短的匹配,这是它应该做的,因为它被记录为这样做。

您可以做两件事:

  • 重命名其中一种方法。对于您和编译器而言,这将使方法解析变得轻而易举,而且绝对清晰。
  • 使两者都需要最后一个参数。这将使方法解析再次变得非常清晰:两个参数与三个参数。

关于c# - 参数 : (required, optional) vs (required, required, optional),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989181/

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